2
0
mirror of https://github.com/vdukhovni/postfix synced 2025-08-29 05:07:58 +00:00

postfix-2.5-20070328

This commit is contained in:
Wietse Venema 2007-03-28 00:00:00 -05:00 committed by Viktor Dukhovni
parent 63e0d1546b
commit a1a5c3cc6e
87 changed files with 1741 additions and 1634 deletions

View File

@ -13386,8 +13386,22 @@ Apologies for any names omitted.
Currently, nothing in Postfix uses this functionality.
File: global/dict_proxy.c.
20070325
Bugfix: postfix-install didn't work for symlink or hardlink
targets, when the parent directory had a value of "no".
20070326
Workaround: Eric Raymond's man page formatters don't handle
low-level *roff .in or .ti controls. We now use .nf and .fi
instead. Files: many.
Wish list:
Remove defer(8) and trace(8) references and man pages. These
are services not program names.
Bind all deliveries to the same local delivery process,
making Postfix perform as poorly as monolithic mailers,
but giving a possibility to eliminate duplicate deliveries.
@ -13398,16 +13412,9 @@ Wish list:
Need scache size limit.
Don't transform bare username into user@localdomain.localdomain
when no domain is specified via main.cf or via the machine
hostname.
Update BACKSCATTER_README to use PCRE because that's what I
am using now.
Update MILTER_README with Martinec info.
http://www.ijs.si/software/amavisd/amavisd-new-docs.html#dkim
Make postcat header/body aware so people can grep headers.
Make postmap header/body aware so people can test multi-line
@ -13490,8 +13497,6 @@ Wish list:
playing with the soft_error test in the smtp_trouble.c
module, and avoiding delivery to backup MX hosts.
select -> kqueue, epoll, /dev/poll, poll() ...
In the SMTP server, set a "pipelining detected" flag at the
start of a session and at protocol synchronization points,
so that reject_unauth_pipelining can be specified in any
@ -13512,9 +13517,6 @@ Wish list:
Privacy: remove local command/pathname details from remote
delivery status reports, and log them via local msg_warn().
Remove defer(8) and trace(8) references and man pages. These
are services not program names.
Is it safe to cache a connection after it has been used for
more than some number of address verification probes?

View File

@ -4,7 +4,11 @@ PPoossttffiixx BBaacckkssccaatttteerr HHoowwttoo
OOvveerrvviieeww
This document describes features that require Postfix version 2.0 or later.
This document describes features that require Postfix version 2.0 or later. The
examples use Perl Compatible Regular Expressions (Postfix pcre: tables), but
also provide a translation to POSIX regular expressions (Postfix regexp:
tables). PCRE is preferred primarily because the implementation is often
faster.
Topics covered in this document:
@ -97,8 +101,8 @@ To block such backscatter I use header_checks and body_checks patterns like
this:
/etc/postfix/main.cf:
header_checks = regexp:/etc/postfix/header_checks
body_checks = regexp:/etc/postfix/body_checks
header_checks = pcre:/etc/postfix/header_checks
body_checks = pcre:/etc/postfix/body_checks
/etc/postfix/header_checks:
if /^Received:/
@ -107,7 +111,7 @@ this:
/^Received: +from +[^ ]+ +\(([^ ]+ +[he]+lo=|[he]+lo +)
(porcupine\.org)\)/
reject forged client name in Received: header: $2
/^Received:.* +by +(porcupine\.org)[[:>:]]/
/^Received:.* +by +(porcupine\.org)\b/
reject forged mail server name in Received: header: $1
endif
/^Message-ID:.* <!&!/ DUNNO
@ -121,7 +125,7 @@ this:
/^[> ]*Received: +from +[^ ]+ +\(([^ ]+ +[he]+lo=|[he]+lo +)
(porcupine\.org)\)/
reject forged client name in Received: header: $2
/^[> ]*Received:.* +by +(porcupine\.org)[[:>:]]/
/^[> ]*Received:.* +by +(porcupine\.org)\b/
reject forged mail server name in Received: header: $1
endif
/^[> ]*Message-ID:.* <!&!/ DUNNO
@ -130,6 +134,9 @@ this:
Notes:
* The example uses pcre: tables mainly for speed; with minor modifications,
you can use regexp: tables as explained below.
* The example is simplified for educational purposes. In reality my patterns
list multiple domain names, as "(domain|domain|...)".
@ -139,8 +146,9 @@ Notes:
* The "\(" and "\)" match "(" and ")" literally. Without the "\", the "(" and
")" would be grouping operators.
* The "[[:>:]]" matches the end of a word. On some systems you should specify
"\>" instead. For details see your system documentation.
* The "\b" is used here to match the end of a word. If you use regexp:
tables, specify "[[:>:]]" (on some systems you should specify "\>" instead;
for details see your system documentation).
* The "if /pattern/" and "endif" eliminate unnecessary matching attempts. DO
NOT indent lines starting with /pattern/ between the "if" and "endif"!
@ -202,25 +210,29 @@ the backscatter mail that I get claims to be sent from these addresses. Such
mail is obviously forged and is very easy to stop.
/etc/postfix/main.cf:
header_checks = regexp:/etc/postfix/header_checks
body_checks = regexp:/etc/postfix/body_checks
header_checks = pcre:/etc/postfix/header_checks
body_checks = pcre:/etc/postfix/body_checks
/etc/postfix/header_checks:
/^(From|Return-Path):.*[[:<:]](user@domain\.tld)[[:>:]]/
/^(From|Return-Path):.*\b(user@domain\.tld)\b/
reject forged sender address in $1: header: $2
/etc/postfix/body_checks:
/^[> ]*(From|Return-Path):.*[[:<:]](user@domain\.tld)[[:>:]]/
/^[> ]*(From|Return-Path):.*\b(user@domain\.tld)\b/
reject forged sender address in $1: header: $2
Notes:
* The example uses pcre: tables mainly for speed; with minor modifications,
you can use regexp: tables as explained below.
* The example is simplified for educational purposes. In reality, my patterns
list multiple email addresses as "(user1@domain1\.tld|user2@domain2\.tld)".
* The "[[:<:]]" and "[[:>:]]" match the beginning and end of a word,
respectively. On some systems you should specify "\<" and "\>" instead. For
details see your system documentation.
* The two "\b" as used in "\b(user@domain\.tld)\b" match the beginning and
end of a word, respectively. If you use regexp: tables, specify "[[:<:]]
and [[:>:]]" (on some systems you should specify "\< and \>" instead; for
details see your system documentation).
* The "\." matches "." literally. Without the "\", the "." would match any
character.

View File

@ -88,6 +88,7 @@ At some point in time, a version of Postfix was supported on:
Linux RedHat 3.x (January 2004) - 9.x
Linux Slackware 3.x, 4.x, 7.x
Linux SuSE 5.x, 6.x, 7.x
Linux Ubuntu 4.10..7.04
Mac OS X
NEXTSTEP 3.x
NetBSD 1.x

View File

@ -443,9 +443,6 @@ NOTES:
* This was tested with sid-milter-0.2.10 and sid-milter-0.2.14.
* This fixes only the ugly message header, but not the WARNING message.
Fortunately, sid-milter logs that message only once.
To fix the ugly message header with other Milter applications, you will need to
do something like this:

View File

@ -209,12 +209,13 @@ queues.
Network -> smtpd(8) <-> anvil(8)
* The bounce(8), defer(8) and trace(8) servers each maintain their own queue
directory trees with per-message logfiles. This information is used to send
delivery or non-delivery notifications to the sender.
* The bounce(8), defer(8) and trace(8) services each maintain their own queue
directory trees with per-message logfiles. Postfix uses this information
when sending "failed", "delayed" or "success" delivery status notifications
to the sender.
The trace(8) service implements support for the Postfix "sendmail -bv" and
"sendmail -v" commands which produce reports about how Postfix delivers
The trace(8) service also implements support for the Postfix "sendmail -bv"
and "sendmail -v" commands which produce reports about how Postfix delivers
mail, and is available with Postfix version 2.1 and later. See DEBUG_README
for examples.

View File

@ -1,184 +1,18 @@
The stable Postfix release is called postfix-2.3.x where 2=major
release number, 3=minor release number, x=patchlevel. The stable
The stable Postfix release is called postfix-2.4.x where 2=major
release number, 4=minor release number, x=patchlevel. The stable
release never changes except for patches that address bugs or
emergencies. Patches change the patchlevel and the release date.
New features are developed in snapshot releases. These are called
postfix-2.4-yyyymmdd where yyyymmdd is the release date (yyyy=year,
postfix-2.5-yyyymmdd where yyyymmdd is the release date (yyyy=year,
mm=month, dd=day). Patches are never issued for snapshot releases;
instead, a new snapshot is released.
The mail_release_date configuration parameter (format: yyyymmdd)
specifies the release date of a stable release or snapshot release.
Incompatibility with Postfix 2.2 and earlier
Incompatibility with Postfix 2.3 and earlier
============================================
If you upgrade from Postfix 2.2 or earlier, read RELEASE_NOTES-2.3
If you upgrade from Postfix 2.3 or earlier, read RELEASE_NOTES-2.4
before proceeding.
Incompatibility with Postfix snapshot 200702224
===============================================
As a safety measure, Postfix now by default creates mailbox dotlock
files on all systems. This prevents problems with GNU POP3D which
subverts kernel locking by creating a new mailbox file and deleting
the old one.
Major changes with Postfix snapshot 20070212-event
==================================================
Better support for systems that run thousands of Postfix processes.
Postfix now supports FreeBSD kqueue(2), Solaris poll(7d) and Linux
epoll(4) as more scalable alternatives to the traditional select(2)
system call, and uses poll(2) when examining a single file descriptor
for readability or writability. These features are supported on
sufficiently recent versions of FreeBSD, NetBSD, OpenBSD, Solaris
and Linux; support for other systems will be added as evidence
becomes available that usable implementations exist.
Incompatibility with Postfix snapshot 20070201
==============================================
Some default settings have been adjusted to better match contemporary
requirements:
- queue_run_delay and minimal_backoff_time were reduced from 1000s
to 300s so that deliveries are retried earlier after the first
failure.
- ipc_idle was reduced from 100s to 5s, so that tlsmgr and scache
clients will more quickly release unused file handles.
Major changes with Postfix snapshot 20070121
============================================
The support for Milter header modification requests was revised.
With minimal change in the on-disk representation, the code was
greatly simplified, and regression tests were updated to ensure
that old errors were not re-introduced. The queue file format is
entirely backwards compatible with Postfix 2.3.
Incompatible changes with Postfix snapshot 20070116
===================================================
A new field is added to the queue file "size" record that specifies
the message content length. Postfix 2.3 and older Postfix 2.4
versions will ignore this field, and will report the message size
as it was before the body was replaced.
Major changes with Postfix snapshot 20070116
============================================
Support for Milter requests to replace the message body. Postfix
now implements all the header/body modification requests that are
available with Sendmail 8.13.
Incompatible changes with Postfix snapshot 20061217
===================================================
Postfix no longer requires a domain name. It uses "localdomain" as
the default Internet domain name when no domain is specified via
main.cf or via the machine's hostname.
Major changes with Postfix snapshot 20061217
============================================
More precise queue flushing with the ETRN, "postqueue -s site", and
"sendmail -qRsite" commands, after minimization of race conditions.
New per-queue-file flushing with "postqueue -i queueid" and "sendmail
-qIqueueid".
Incompatible changes with Postfix snapshot 20061214
===================================================
The check_smtpd_policy client sends TLS certificate attributes
(client ccert_subject, ccert_issuer) only after successful client
certificate verification. The reason is that the certification
verification status itself is not available in the policy request.
The check_smtpd_policy client sends TLS certificate fingerprint
information even when the certificate itself was not verified.
The remote SMTP client TLS certificate fingerprint can be used for
access control even when the certificate itself was not verified.
Incompatible changes with Postfix snapshot 20061209
===================================================
The Postfix installation procedure no longer updates main.cf with
"unknown_local_recipient_reject_code = 450". Four years after the
introduction of mandatory recipient validation, this transitional
tool is no longer neeed.
After upgrading Postfix you MUST execute "postfix reload", otherwise
the queue manager may log a warnings with:
warning: connect to transport retry: Connection refused
The upgrade procedure adds a new "retry" service to the master.cf
file. If you make the mistake of copying old Postfix configuration
files over the new files, the queue manager may log warnings with:
warning: connect to transport retry: Connection refused
To fix your master.cf file, use "postfix upgrade-configuration"
followed by "postfix reload".
Small changes were made to the default bounce message templates,
to prevent HTML-aware software from hiding or removing the text
"<postmaster>", and producing misleading text.
Major changes with Postfix snapshot 20061209
============================================
Better interoperability with non-conforming SMTP servers that reply
and disconnect before Postfix has sent the complete message content.
Improved worst-case (old and new) queue manager performance when
deferring or bouncing large amounts of mail. Instead of talking to
the bounce or defer service synchronously, this work is now done
in the background by the error or retry service.
Improved worst-case (new) queue manager performance when delivering
multi-recipient mail. The queue manager now proactively reads
recipients from the queue file, instead of waiting for the slowest
deliveries to complete before reading in new recipients. This
introduces two parameters: default_recipient_refill_limit (how many
recipient slots to refill at a time) and default_recipient_refill_delay
(how long to wait between refill operations). These two parameters
act as defaults for optional per-transport settings.
Better support for queue file systems on file servers with drifting
clocks. Clock skew can be a problem, because Postfix does not deliver
mail until the local clock catches up with the queue file's last
modification time stamp. On systems with usable futimes() or
equivalent (Solaris, *BSD, MacOS, but not Linux), Postfix now always
explicitly sets the queue file last modification time stamps while
creating a queue file. On systems without usable futimes() (Linux,
and ancient versions of Solaris, SunOS and *BSD) Postfix keeps using
the slower utime() system call to update queue file time stamps
when the file system clock is off with respect to the local system
clock, and logs a warning.
Incompatible changes with Postfix snapshot 20061006
===================================================
The format of SMTP server TLS session cache lookup keys has changed.
The lookup key now includes the master.cf service name.
Major changes with Postfix snapshot 20061006
============================================
Individual CISCO PIX bug workarounds are now on/off configurable.
This introduces new parameters: smtp_pix_workarounds (default:
disable_esmtp, delay_dotcrlf) and smtp_pix_workaround_maps (workarounds
indexed by server IP address). The default settings are backwards
compatible.
Incompatible changes with Postfix snapshot 20060806
===================================================
Postfix no longer announces its name in delivery status notifications.
Users believe that Wietse provides a free help desk service that
solves all their email problems.

198
postfix/RELEASE_NOTES-2.4 Normal file
View File

@ -0,0 +1,198 @@
The stable Postfix release is called postfix-2.4.x where 2=major
release number, 4=minor release number, x=patchlevel. The stable
release never changes except for patches that address bugs or
emergencies. Patches change the patchlevel and the release date.
New features are developed in snapshot releases. These are called
postfix-2.5-yyyymmdd where yyyymmdd is the release date (yyyy=year,
mm=month, dd=day). Patches are never issued for snapshot releases;
instead, a new snapshot is released.
The mail_release_date configuration parameter (format: yyyymmdd)
specifies the release date of a stable release or snapshot release.
Major changes - critical
------------------------
See RELEASE_NOTES-2.3 if you upgrade from Postfix 2.2 or earlier.
[Incompat 20070122] To take advantage of the new support for BSD
kqueue, Linux epoll, or Solaris /dev/poll, you must restart (not
reload) Postfix after upgrading from Postfix 2.3.
[Incompat 20061209] If you upgrade Postfix without restarting, you
MUST execute "postfix reload", otherwise the queue manager may log
a warnings with:
warning: connect to transport retry: Connection refused
[Incompat 20061209] The upgrade procedure adds a new "retry" service
to the master.cf file. If you make the mistake of copying old
Postfix configuration files over the new files, the queue manager
may log warnings with:
warning: connect to transport retry: Connection refused
To fix your master.cf file, use "postfix upgrade-configuration"
followed by "postfix reload".
Major changes - safety
----------------------
[Incompat 20070222] As a safety measure, Postfix now by default
creates mailbox dotlock files on all systems. This prevents problems
with GNU POP3D which subverts kernel locking by creating a new
mailbox file and deleting the old one.
Major changes - Milter support
------------------------------
[Feature 20070121] The support for Milter header modification
requests was revised. With minimal change in the on-disk representation,
the code was greatly simplified, and regression tests were updated
to ensure that old errors were not re-introduced. The queue file
format is entirely backwards compatible with Postfix 2.3.
[Feature 20070116] Support for Milter requests to replace the message
body. Postfix now implements all the header/body modification
requests that are available with Sendmail 8.13.
[Incompat 20070116] A new field is added to the queue file "size"
record that specifies the message content length. Postfix 2.3 and
older Postfix 2.4 snapshots will ignore this field, and will report
the message size as it was before the body was replaced.
Major changes - TLS support
---------------------------
[Incompat 20061214] The check_smtpd_policy client sends TLS certificate
attributes (client ccert_subject, ccert_issuer) only after successful
client certificate verification. The reason is that the certification
verification status itself is not available in the policy request.
[Incompat 20061214] The check_smtpd_policy client sends TLS certificate
fingerprint information even when the certificate itself was not
verified.
[Incompat 20061214] The remote SMTP client TLS certificate fingerprint
can be used for access control even when the certificate itself was
not verified.
[Incompat 20061006] The format of SMTP server TLS session cache
lookup keys has changed. The lookup key now includes the master.cf
service name.
Major changes - performance
---------------------------
[Feature 20070212] Better support for systems that run thousands
of Postfix processes. Postfix now supports FreeBSD kqueue(2),
Solaris poll(7d) and Linux epoll(4) as more scalable alternatives
to the traditional select(2) system call, and uses poll(2) when
examining a single file descriptor for readability or writability.
These features are supported on sufficiently recent versions of
FreeBSD, NetBSD, OpenBSD, Solaris and Linux; support for other
systems will be added as evidence becomes available that usable
implementations exist.
[Incompat 20070201] Some default settings have been adjusted to
better match contemporary requirements:
- queue_run_delay and minimal_backoff_time were reduced from 1000s
to 300s so that deliveries are retried earlier after the first
failure.
- ipc_idle was reduced from 100s to 5s, so that tlsmgr and scache
clients will more quickly release unused file handles.
[Feature 20061209] Improved worst-case (old and new) queue manager
performance when deferring or bouncing large amounts of mail. Instead
of talking to the bounce or defer service synchronously, this work
is now done in the background by the error or retry service.
[Feature 20061209] Improved worst-case (new) queue manager performance
when delivering multi-recipient mail. The queue manager now proactively
reads recipients from the queue file, instead of waiting for the
slowest deliveries to complete before reading in new recipients.
This introduces two parameters: default_recipient_refill_limit (how
many recipient slots to refill at a time) and
default_recipient_refill_delay (how long to wait between refill
operations). These two parameters act as defaults for optional
per-transport settings.
Major changes - delivery status notifications
---------------------------------------------
[Incompat 20061209] Small changes were made to the default bounce
message templates, to prevent HTML-aware software from hiding or
removing the text "<postmaster>", and producing misleading text.
[Incompat 20060806] Postfix no longer announces its name in delivery
status notifications. Users believe that Wietse provides a free
help desk service that solves all their email problems.
Major changes - ETRN support
----------------------------
[Feature 20061217] More precise queue flushing with the ETRN,
"postqueue -s site", and "sendmail -qRsite" commands, after
minimization of race conditions. New per-queue-file flushing with
"postqueue -i queueid" and "sendmail -qIqueueid".
Major changes - small office/home office support
------------------------------------------------
[Incompat 20061217] Postfix no longer requires a domain name. It
uses "localdomain" as the default Internet domain name when no
domain is specified via main.cf or via the machine's hostname.
Major changes - SMTP access control
-----------------------------------
[Incompat 20061214] The check_smtpd_policy client sends TLS certificate
attributes (client ccert_subject, ccert_issuer) only after successful
client certificate verification. The reason is that the certification
verification status itself is not available in the policy request.
[Incompat 20061214] The check_smtpd_policy client sends TLS certificate
fingerprint information even when the certificate itself was not
verified.
[Incompat 20061214] The remote SMTP client TLS certificate fingerprint
can be used for
access control even when the certificate itself was not verified.
[Incompat 20061209] The Postfix installation procedure no longer
updates main.cf with "unknown_local_recipient_reject_code = 450".
Four years after the introduction of mandatory recipient validation,
this transitional tool is no longer neeed.
Major changes - workarounds
---------------------------
[Incompat 20070222] As a safety measure, Postfix now by default
creates mailbox dotlock files on all systems. This prevents problems
with GNU POP3D which subverts kernel locking by creating a new
mailbox file and deleting the old one.
[Feature 20061209] Better interoperability with non-conforming SMTP
servers that reply and disconnect before Postfix has sent the
complete message content.
[Feature 20061209] Better support for queue file systems on file
servers with drifting clocks. Clock skew can be a problem, because
Postfix does not deliver mail until the local clock catches up with
the queue file's last modification time stamp. On systems with
usable futimes() or equivalent (Solaris, *BSD, MacOS, but not Linux),
Postfix now always explicitly sets the queue file last modification
time stamps while creating a queue file. On systems without usable
futimes() (Linux, and ancient versions of Solaris, SunOS and *BSD)
Postfix keeps using the slower utime() system call to update queue
file time stamps when the file system clock is off with respect to
the local system clock, and logs a warning.
[Feature 20061006] Individual CISCO PIX bug workarounds are now
on/off configurable. This introduces new parameters: smtp_pix_workarounds
(default: disable_esmtp, delay_dotcrlf) and smtp_pix_workaround_maps
(workarounds indexed by server IP address). The default settings
are backwards compatible.

View File

@ -382,11 +382,11 @@
# 1.2.3 REJECT
# 1.2.3.4 OK
#
# Execute the command "postmap /etc/postfix/access" after
# Execute the command "postmap /etc/postfix/access" after
# editing the file.
#
# BUGS
# The table format does not understand quoting conventions.
# The table format does not understand quoting conventions.
#
# SEE ALSO
# postmap(1), Postfix lookup table manager
@ -395,13 +395,13 @@
# transport(5), transport:nexthop syntax
#
# README FILES
# Use "postconf readme_directory" or "postconf html_direc-
# Use "postconf readme_directory" or "postconf html_direc-
# tory" to locate this information.
# SMTPD_ACCESS_README, built-in SMTP server access control
# DATABASE_README, Postfix lookup table overview
#
# LICENSE
# The Secure Mailer license must be distributed with this
# The Secure Mailer license must be distributed with this
# software.
#
# AUTHOR(S)

View File

@ -111,8 +111,10 @@
# applied to recipient addresses, the Postfix SMTP
# server accepts mail for any recipient in domain,
# regardless of whether that recipient exists. This
# may turn your mail system into a backscatter source
# that returns undeliverable spam to innocent people.
# may turn your mail system into a backscatter
# source: Postfix first accepts mail for non-existent
# recipients and then tries to return that mail as
# "undeliverable" to the often forged sender address.
#
# RESULT ADDRESS REWRITING
# The lookup result is subject to address rewriting:

View File

@ -155,12 +155,12 @@
# that the ISP supports "+" style address extensions).
#
# /etc/postfix/main.cf:
# smtp_generic_maps = hash:/etc/postfix/generic
# smtp_generic_maps = hash:/etc/postfix/generic
#
# /etc/postfix/generic:
# his@localdomain.local hisaccount@hisisp.example
# her@localdomain.local heraccount@herisp.example
# @localdomain.local hisaccount+local@hisisp.example
# his@localdomain.local hisaccount@hisisp.example
# her@localdomain.local heraccount@herisp.example
# @localdomain.local hisaccount+local@hisisp.example
#
# Execute the command "postmap /etc/postfix/generic" when-
# ever the table is changed. Instead of hash, some systems

View File

@ -66,70 +66,75 @@
# time, even when a message header spans multiple lines.
# Body lines are always examined one line at a time.
#
# COMPATIBILITY
# With Postfix version 2.2 and earlier specify "postmap -fq"
# to query a table that contains case sensitive patterns. By
# default, regexp: and pcre: patterns are case insensitive.
#
# TABLE FORMAT
# This document assumes that header and body_checks rules
# are specified in the form of Postfix regular expression
# lookup tables. Usually the best performance is obtained
# This document assumes that header and body_checks rules
# are specified in the form of Postfix regular expression
# lookup tables. Usually the best performance is obtained
# with pcre (Perl Compatible Regular Expression) tables, but
# the slower regexp (POSIX regular expressions) support is
# more widely available. Use the command "postconf -m" to
# find out what lookup table types your Postfix system sup-
# the slower regexp (POSIX regular expressions) support is
# more widely available. Use the command "postconf -m" to
# find out what lookup table types your Postfix system sup-
# ports.
#
# The general format of Postfix regular expression tables is
# given below. For a discussion of specific pattern or
# flags syntax, see pcre_table(5) or regexp_table(5),
# given below. For a discussion of specific pattern or
# flags syntax, see pcre_table(5) or regexp_table(5),
# respectively.
#
# /pattern/flags action
# When pattern matches the input string, execute the
# corresponding action. See below for a list of pos-
# When pattern matches the input string, execute the
# corresponding action. See below for a list of pos-
# sible actions.
#
# !/pattern/flags action
# When pattern does not match the input string, exe-
# When pattern does not match the input string, exe-
# cute the corresponding action.
#
# if /pattern/flags
#
# endif Match the input string against the patterns between
# if and endif, if and only if the same input string
# if and endif, if and only if the same input string
# also matches pattern. The if..endif can nest.
#
# Note: do not prepend whitespace to patterns inside
# Note: do not prepend whitespace to patterns inside
# if..endif.
#
# if !/pattern/flags
#
# endif Match the input string against the patterns between
# if and endif, if and only if the same input string
# if and endif, if and only if the same input string
# does not match pattern. The if..endif can nest.
#
# blank lines and comments
# Empty lines and whitespace-only lines are ignored,
# as are lines whose first non-whitespace character
# Empty lines and whitespace-only lines are ignored,
# as are lines whose first non-whitespace character
# is a `#'.
#
# multi-line text
# A pattern/action line starts with non-whitespace
# text. A line that starts with whitespace continues
# A pattern/action line starts with non-whitespace
# text. A line that starts with whitespace continues
# a logical line.
#
# TABLE SEARCH ORDER
# For each line of message input, the patterns are applied
# in the order as specified in the table. When a pattern is
# found that matches the input line, the corresponding
# action is executed and then the next input line is
# For each line of message input, the patterns are applied
# in the order as specified in the table. When a pattern is
# found that matches the input line, the corresponding
# action is executed and then the next input line is
# inspected.
#
# TEXT SUBSTITUTION
# Substitution of substrings from the matched expression
# into the action string is possible using the conventional
# Perl syntax ($1, $2, etc.). The macros in the result
# string may need to be written as ${n} or $(n) if they
# Substitution of substrings from the matched expression
# into the action string is possible using the conventional
# Perl syntax ($1, $2, etc.). The macros in the result
# string may need to be written as ${n} or $(n) if they
# aren't followed by whitespace.
#
# Note: since negated patterns (those preceded by !) return
# Note: since negated patterns (those preceded by !) return
# a result when the expression does not match, substitutions
# are not available for negated patterns.
#
@ -138,12 +143,12 @@
# case for consistency with other Postfix documentation.
#
# DISCARD optional text...
# Claim successful delivery and silently discard the
# message. Log the optional text if specified, oth-
# Claim successful delivery and silently discard the
# message. Log the optional text if specified, oth-
# erwise log a generic message.
#
# Note: this action disables further header or
# body_checks inspection of the current message and
# Note: this action disables further header or
# body_checks inspection of the current message and
# affects all recipients. To discard only one recip-
# ient without discarding the entire message, use the
# transport(5) table to direct mail to the discard(8)
@ -151,49 +156,49 @@
#
# This feature is available in Postfix 2.0 and later.
#
# DUNNO Pretend that the input line did not match any pat-
# tern, and inspect the next input line. This action
# DUNNO Pretend that the input line did not match any pat-
# tern, and inspect the next input line. This action
# can be used to shorten the table search.
#
# For backwards compatibility reasons, Postfix also
# accepts OK but it is (and always has been) treated
# For backwards compatibility reasons, Postfix also
# accepts OK but it is (and always has been) treated
# as DUNNO.
#
# This feature is available in Postfix 2.1 and later.
#
# FILTER transport:destination
# Write a content filter request to the queue file,
# and inspect the next input line. After the com-
# plete message is received it will be sent through
# Write a content filter request to the queue file,
# and inspect the next input line. After the com-
# plete message is received it will be sent through
# the specified external content filter. More infor-
# mation about external content filters is in the
# mation about external content filters is in the
# Postfix FILTER_README file.
#
# Note: this action overrides the content_filter set-
# ting, and affects all recipients of the message. In
# the case that multiple FILTER actions fire, only
# the case that multiple FILTER actions fire, only
# the last one is executed.
#
# This feature is available in Postfix 2.0 and later.
#
# HOLD optional text...
# Arrange for the message to be placed on the hold
# queue, and inspect the next input line. The mes-
# sage remains on hold until someone either deletes
# it or releases it for delivery. Log the optional
# Arrange for the message to be placed on the hold
# queue, and inspect the next input line. The mes-
# sage remains on hold until someone either deletes
# it or releases it for delivery. Log the optional
# text if specified, otherwise log a generic message.
#
# Mail that is placed on hold can be examined with
# the postcat(1) command, and can be destroyed or
# Mail that is placed on hold can be examined with
# the postcat(1) command, and can be destroyed or
# released with the postsuper(1) command.
#
# Note: use "postsuper -r" to release mail that was
# kept on hold for a significant fraction of $maxi-
# Note: use "postsuper -r" to release mail that was
# kept on hold for a significant fraction of $maxi-
# mal_queue_lifetime or $bounce_queue_lifetime, or
# longer. Use "postsuper -H" only for mail that will
# longer. Use "postsuper -H" only for mail that will
# not expire within a few delivery attempts.
#
# Note: this action affects all recipients of the
# Note: this action affects all recipients of the
# message.
#
# This feature is available in Postfix 2.0 and later.
@ -202,23 +207,23 @@
# the next input line.
#
# PREPEND text...
# Prepend one line with the specified text, and
# Prepend one line with the specified text, and
# inspect the next input line.
#
# Notes:
#
# o The prepended text is output on a separate
# o The prepended text is output on a separate
# line, immediately before the input that
# triggered the PREPEND action.
#
# o The prepended text is not considered part of
# the input stream: it is not subject to
# the input stream: it is not subject to
# header/body checks or address rewriting, and
# it does not affect the way that Postfix adds
# missing message headers.
#
# o When prepending text before a message header
# line, the prepended text must begin with a
# line, the prepended text must begin with a
# valid message header label.
#
# o This action cannot be used to prepend multi-
@ -227,46 +232,46 @@
# This feature is available in Postfix 2.1 and later.
#
# REDIRECT user@domain
# Write a message redirection request to the queue
# file, and inspect the next input line. After the
# Write a message redirection request to the queue
# file, and inspect the next input line. After the
# message is queued, it will be sent to the specified
# address instead of the intended recipient(s).
#
# Note: this action overrides the FILTER action, and
# affects all recipients of the message. If multiple
# REDIRECT actions fire, only the last one is exe-
# Note: this action overrides the FILTER action, and
# affects all recipients of the message. If multiple
# REDIRECT actions fire, only the last one is exe-
# cuted.
#
# This feature is available in Postfix 2.1 and later.
#
# REPLACE text...
# Replace the current line with the specified text,
# Replace the current line with the specified text,
# and inspect the next input line.
#
# This feature is available in Postfix 2.2 and later.
# The description below applies to Postfix 2.2.2 and
# The description below applies to Postfix 2.2.2 and
# later.
#
# Notes:
#
# o When replacing a message header line, the
# replacement text must begin with a valid
# o When replacing a message header line, the
# replacement text must begin with a valid
# header label.
#
# o The replaced text remains part of the input
# stream. Unlike the result from the PREPEND
# action, a replaced message header may be
# subject to address rewriting and may affect
# the way that Postfix adds missing message
# o The replaced text remains part of the input
# stream. Unlike the result from the PREPEND
# action, a replaced message header may be
# subject to address rewriting and may affect
# the way that Postfix adds missing message
# headers.
#
# REJECT optional text...
# Reject the entire message. Reply with optional
# Reject the entire message. Reply with optional
# text... when the optional text is specified, other-
# wise reply with a generic error message.
#
# Note: this action disables further header or
# body_checks inspection of the current message and
# Note: this action disables further header or
# body_checks inspection of the current message and
# affects all recipients.
#
# Postfix version 2.3 and later support enhanced sta-
@ -275,32 +280,32 @@
# enhanced status code of "5.7.1".
#
# WARN optional text...
# Log a warning with the optional text... (or log a
# generic message), and inspect the next input line.
# Log a warning with the optional text... (or log a
# generic message), and inspect the next input line.
# This action is useful for debugging and for testing
# a pattern before applying more drastic actions.
#
# BUGS
# Many people overlook the main limitations of header and
# Many people overlook the main limitations of header and
# body_checks rules.
#
# o These rules operate on one logical message header
# o These rules operate on one logical message header
# or one body line at a time. A decision made for one
# line is not carried over to the next line.
#
# o If text in the message body is encoded (RFC 2045)
# then the rules have to specified for the encoded
# o If text in the message body is encoded (RFC 2045)
# then the rules need to be specified for the encoded
# form.
#
# o Likewise, when message headers are encoded (RFC
# 2047) then the rules need to be specified for the
# o Likewise, when message headers are encoded (RFC
# 2047) then the rules need to be specified for the
# encoded form.
#
# Message headers added by the cleanup(8) daemon itself are
# Message headers added by the cleanup(8) daemon itself are
# excluded from inspection. Examples of such message headers
# are From:, To:, Message-ID:, Date:.
#
# Message headers deleted by the cleanup(8) daemon will be
# Message headers deleted by the cleanup(8) daemon will be
# examined before they are deleted. Examples are: Bcc:, Con-
# tent-Length:, Return-Path:.
#
@ -308,11 +313,11 @@
# body_checks
# Lookup tables with content filter rules for message
# body lines. These filters see one physical line at
# a time, in chunks of at most $line_length_limit
# a time, in chunks of at most $line_length_limit
# bytes.
#
# body_checks_size_limit
# The amount of content per message body segment
# The amount of content per message body segment
# (attachment) that is subjected to $body_checks fil-
# tering.
#
@ -322,32 +327,32 @@
#
# nested_header_checks (default: $header_checks)
# Lookup tables with content filter rules for message
# header lines: respectively, these are applied to
# the initial message headers (not including MIME
# headers), to the MIME headers anywhere in the mes-
# sage, and to the initial headers of attached mes-
# header lines: respectively, these are applied to
# the initial message headers (not including MIME
# headers), to the MIME headers anywhere in the mes-
# sage, and to the initial headers of attached mes-
# sages.
#
# Note: these filters see one logical message header
# at a time, even when a message header spans multi-
# ple lines. Message headers that are longer than
# Note: these filters see one logical message header
# at a time, even when a message header spans multi-
# ple lines. Message headers that are longer than
# $header_size_limit characters are truncated.
#
# disable_mime_input_processing
# While receiving mail, give no special treatment to
# MIME related message headers; all text after the
# While receiving mail, give no special treatment to
# MIME related message headers; all text after the
# initial message headers is considered to be part of
# the message body. This means that header_checks is
# applied to all the initial message headers, and
# the message body. This means that header_checks is
# applied to all the initial message headers, and
# that body_checks is applied to the remainder of the
# message.
#
# Note: when used in this manner, body_checks will
# process a multi-line message header one line at a
# Note: when used in this manner, body_checks will
# process a multi-line message header one line at a
# time.
#
# EXAMPLES
# Header pattern to block attachments with bad file name
# Header pattern to block attachments with bad file name
# extensions.
#
# /etc/postfix/main.cf:
@ -379,7 +384,7 @@
# RFC 2047, message header encoding for non-ASCII text
#
# README FILES
# Use "postconf readme_directory" or "postconf html_direc-
# Use "postconf readme_directory" or "postconf html_direc-
# tory" to locate this information.
# DATABASE_README, Postfix lookup table overview
# CONTENT_INSPECTION_README, Postfix content inspection overview
@ -387,7 +392,7 @@
# BACKSCATTER_README, blocking returned forged mail
#
# LICENSE
# The Secure Mailer license must be distributed with this
# The Secure Mailer license must be distributed with this
# software.
#
# AUTHOR(S)

View File

@ -41,7 +41,9 @@
# The input format for the postmap(1) command is as follows:
#
# o An entry has one of the following form:
#
# pattern new_location
#
# Where new_location specifies contact information
# such as an email address, or perhaps a street
# address or telephone number.

View File

@ -13,8 +13,10 @@
# DESCRIPTION
# The optional transport(5) table specifies a mapping from
# email addresses to message delivery transports and next-
# hop hosts. The table is searched by the trivial-rewrite(8)
# daemon.
# hop destinations. Message delivery transports such as
# local or smtp are defined in the master.cf file, and next-
# hop destinations are typically hosts or domain names. The
# table is searched by the trivial-rewrite(8) daemon.
#
# This mapping overrides the default transport:nexthop
# selection that is built into Postfix:
@ -166,7 +168,7 @@
#
# my.domain :
# .my.domain :
# * smtp:outbound-relay.my.domain
# * smtp:outbound-relay.my.domain
#
# In order to send mail for example.com and its subdomains
# via the uucp transport to the UUCP host named example:
@ -207,30 +209,30 @@
#
# The error mailer can be used to bounce mail:
#
# .example.com error:mail for *.example.com is not
# deliverable
# .example.com error:mail for *.example.com is not deliverable
#
# This causes all mail for user@anything.example.com to be
# This causes all mail for user@anything.example.com to be
# bounced.
#
# REGULAR EXPRESSION TABLES
# This section describes how the table lookups change when
# This section describes how the table lookups change when
# the table is given in the form of regular expressions. For
# a description of regular expression lookup table syntax,
# a description of regular expression lookup table syntax,
# see regexp_table(5) or pcre_table(5).
#
# Each pattern is a regular expression that is applied to
# the entire address being looked up. Thus,
# some.domain.hierarchy is not looked up via its parent
# domains, nor is user+foo@domain looked up as user@domain.
# Each pattern is a regular expression that is applied to
# the entire address being looked up. Thus,
# some.domain.hierarchy is not looked up via its parent
# domains, nor is user+foo@domain looked up as user@domain.
#
# Patterns are applied in the order as specified in the ta-
# ble, until a pattern is found that matches the search
# Patterns are applied in the order as specified in the ta-
# ble, until a pattern is found that matches the search
# string.
#
# Results are the same as with indexed file lookups, with
# the additional feature that parenthesized substrings from
# the pattern can be interpolated as $1, $2 and so on.
# The trivial-rewrite(8) server disallows regular expression
# substitution of $1 etc. in regular expression lookup
# tables, because that could open a security hole (Postfix
# version 2.3 and later).
#
# TCP-BASED TABLES
# This section describes how the table lookups change when

View File

@ -107,8 +107,10 @@
# Postfix SMTP server accepts mail for any recipient
# in domain, regardless of whether that recipient
# exists. This may turn your mail system into a
# backscatter source that returns undeliverable spam
# to innocent people.
# backscatter source: Postfix first accepts mail for
# non-existent recipients and then tries to return
# that mail as "undeliverable" to the often forged
# sender address.
#
# RESULT ADDRESS REWRITING
# The lookup result is subject to address rewriting:
@ -156,15 +158,15 @@
# /etc/postfix/main.cf:
# virtual_alias_maps = hash:/etc/postfix/virtual
#
# Note: some systems use dbm databases instead of hash.
# See the output from "postconf -m" for available data-
# base types.
# Note: some systems use dbm databases instead of hash. See
# the output from "postconf -m" for available database
# types.
#
# /etc/postfix/virtual:
# virtual-alias.domain anything (right-hand content does not matter)
# postmaster@virtual-alias.domain postmaster
# user1@virtual-alias.domain address1
# user2@virtual-alias.domain address2, address3
# virtual-alias.domain anything (right-hand content does not matter)
# postmaster@virtual-alias.domain postmaster
# user1@virtual-alias.domain address1
# user2@virtual-alias.domain address2, address3
#
# The virtual-alias.domain anything entry is required for a
# virtual alias domain. Without this entry, mail is rejected

View File

@ -21,7 +21,10 @@ Backscatter Howto</h1>
<h2>Overview </h2>
This document describes features that require Postfix version 2.0
or later.
or later. The examples use Perl Compatible Regular Expressions
(Postfix <a href="pcre_table.5.html">pcre</a>: tables), but also provide a translation to POSIX
regular expressions (Postfix <a href="regexp_table.5.html">regexp</a>: tables). PCRE is preferred
primarily because the implementation is often faster.</p>
<p> Topics covered in this document: </p>
@ -174,8 +177,8 @@ patterns like this: </p>
<blockquote>
<pre>
/etc/postfix/<a href="postconf.5.html">main.cf</a>:
<a href="postconf.5.html#header_checks">header_checks</a> = <a href="regexp_table.5.html">regexp</a>:/etc/postfix/header_checks
<a href="postconf.5.html#body_checks">body_checks</a> = <a href="regexp_table.5.html">regexp</a>:/etc/postfix/body_checks
<a href="postconf.5.html#header_checks">header_checks</a> = <a href="pcre_table.5.html">pcre</a>:/etc/postfix/header_checks
<a href="postconf.5.html#body_checks">body_checks</a> = <a href="pcre_table.5.html">pcre</a>:/etc/postfix/body_checks
/etc/postfix/header_checks:
if /^Received:/
@ -183,7 +186,7 @@ patterns like this: </p>
reject forged client name in Received: header: $1
/^Received: +from +[^ ]+ +\(([^ ]+ +[he]+lo=|[he]+lo +)(porcupine\.org)\)/
reject forged client name in Received: header: $2
/^Received:.* +by +(porcupine\.org)[[:&gt;:]]/
/^Received:.* +by +(porcupine\.org)\b/
reject forged mail server name in Received: header: $1
endif
/^Message-ID:.* &lt;!&amp;!/ DUNNO
@ -196,7 +199,7 @@ patterns like this: </p>
reject forged client name in Received: header: $1
/^[&gt; ]*Received: +from +[^ ]+ +\(([^ ]+ +[he]+lo=|[he]+lo +)(porcupine\.org)\)/
reject forged client name in Received: header: $2
/^[&gt; ]*Received:.* +by +(porcupine\.org)[[:&gt;:]]/
/^[&gt; ]*Received:.* +by +(porcupine\.org)\b/
reject forged mail server name in Received: header: $1
endif
/^[&gt; ]*Message-ID:.* &lt;!&amp;!/ DUNNO
@ -209,6 +212,9 @@ patterns like this: </p>
<ul>
<li> <p> The example uses <a href="pcre_table.5.html">pcre</a>: tables mainly for speed; with minor
modifications, you can use <a href="regexp_table.5.html">regexp</a>: tables as explained below. </p>
<li> <p> The example is simplified for educational purposes. In
reality my patterns list multiple domain names, as
"<tt>(domain|domain|...)</tt>". </p>
@ -220,9 +226,10 @@ the "<tt>\</tt>", the "<tt>.</tt>" would match any character. </p>
and "<tt>)</tt>" literally. Without the "<tt>\</tt>", the "<tt>(</tt>"
and "<tt>)</tt>" would be grouping operators. </p>
<li> <p> The "<tt>[[:&gt;:]]</tt>" matches the end of a word. On
some systems you should specify "<tt>\&gt;</tt>" instead. For details
see your system documentation. </p>
<li> <p> The "<tt>\b</tt>" is used here to match the end of a word.
If you use <a href="regexp_table.5.html">regexp</a>: tables, specify "<tt>[[:&gt;:]]</tt>" (on some
systems you should specify "<tt>\&gt;</tt>" instead; for details
see your system documentation).
<li> <p> The "if /pattern/" and "endif" eliminate unnecessary
matching attempts. DO NOT indent lines starting with /pattern/
@ -311,15 +318,15 @@ and is very easy to stop.
<blockquote>
<pre>
/etc/postfix/<a href="postconf.5.html">main.cf</a>:
<a href="postconf.5.html#header_checks">header_checks</a> = <a href="regexp_table.5.html">regexp</a>:/etc/postfix/header_checks
<a href="postconf.5.html#body_checks">body_checks</a> = <a href="regexp_table.5.html">regexp</a>:/etc/postfix/body_checks
<a href="postconf.5.html#header_checks">header_checks</a> = <a href="pcre_table.5.html">pcre</a>:/etc/postfix/header_checks
<a href="postconf.5.html#body_checks">body_checks</a> = <a href="pcre_table.5.html">pcre</a>:/etc/postfix/body_checks
/etc/postfix/header_checks:
/^(From|Return-Path):.*[[:&lt;:]](user@domain\.tld)[[:&gt;:]]/
/^(From|Return-Path):.*\b(user@domain\.tld)\b/
reject forged sender address in $1: header: $2
/etc/postfix/body_checks:
/^[&gt; ]*(From|Return-Path):.*[[:&lt;:]](user@domain\.tld)[[:&gt;:]]/
/^[&gt; ]*(From|Return-Path):.*\b(user@domain\.tld)\b/
reject forged sender address in $1: header: $2
</pre>
</blockquote>
@ -328,14 +335,18 @@ and is very easy to stop.
<ul>
<li> <p> The example uses <a href="pcre_table.5.html">pcre</a>: tables mainly for speed; with minor
modifications, you can use <a href="regexp_table.5.html">regexp</a>: tables as explained below. </p>
<li> <p> The example is simplified for educational purposes. In
reality, my patterns list multiple email addresses as
"<tt>(user1@domain1\.tld|user2@domain2\.tld)</tt>". </p>
<li> <p> The "<tt>[[:&lt;:]]</tt>" and "<tt>[[:&gt;:]]</tt>" match
the beginning and end of a word, respectively. On some systems you
should specify "<tt>\&lt;</tt>" and "<tt>\&gt;</tt>" instead. For
details see your system documentation. </p>
<li> <p> The two "<tt>\b</tt>" as used in "<tt>\b(user@domain\.tld)\b</tt>"
match the beginning and end of a word, respectively. If you use
<a href="regexp_table.5.html">regexp</a>: tables, specify "<tt>[[:&lt;:]]</tt> and <tt>[[:&gt;:]]</tt>"
(on some systems you should specify "<tt>\&lt;</tt> and <tt>\&gt;</tt>"
instead; for details see your system documentation). </p>
<li> <p> The "<tt>\.</tt>" matches "<tt>.</tt>" literally. Without
the "<tt>\</tt>", the "<tt>.</tt>" would match any character. </p>

View File

@ -149,6 +149,7 @@ Linux Debian 1.3.1, 2.x, 3.x <br>
Linux RedHat 3.x (January 2004) - 9.x <br>
Linux Slackware 3.x, 4.x, 7.x <br>
Linux SuSE 5.x, 6.x, 7.x <br>
Linux Ubuntu 4.10..7.04<br>
Mac OS X <br>
NEXTSTEP 3.x <br>
NetBSD 1.x <br>

View File

@ -708,9 +708,6 @@ text below: </p>
<li> <p> This was tested with sid-milter-0.2.10 and sid-milter-0.2.14. </p>
<li> <p> This fixes only the ugly message header, but not the WARNING
message. Fortunately, sid-milter logs that message only once. </p>
</ul>
<p> To fix the ugly message header with other Milter applications,

View File

@ -460,12 +460,13 @@ bgcolor="#f0f0ff"> <br> <a href="smtpd.8.html">smtpd(8)</a><br><br> </td> <td> <
</table>
<li> <p> The <a href="bounce.8.html">bounce(8)</a>, <a href="defer.8.html">defer(8)</a> and <a href="trace.8.html">trace(8)</a> servers each maintain
their own queue directory trees with per-message logfiles. This
information is used to send delivery or non-delivery notifications
to the sender. </p>
<li> <p> The <a href="bounce.8.html">bounce(8)</a>, <a href="defer.8.html">defer(8)</a> and <a href="trace.8.html">trace(8)</a> services each maintain
their own queue directory trees with per-message logfiles. Postfix
uses this information when sending "failed", "delayed" or "success"
delivery status notifications to the sender. </p>
<p> The <a href="trace.8.html">trace(8)</a> service implements support for the Postfix "sendmail
<p> The <a href="trace.8.html">trace(8)</a> service also implements support for the Postfix
"sendmail
-bv" and "sendmail -v" commands which produce reports about how
Postfix delivers mail, and is available with Postfix version 2.1
and later. See <a href="DEBUG_README.html#trace_mail"> DEBUG_README

View File

@ -388,11 +388,11 @@ ACCESS(5) ACCESS(5)
1.2.3 REJECT
1.2.3.4 OK
Execute the command "<b>postmap /etc/postfix/access</b>" after
Execute the command "<b>postmap /etc/postfix/access</b>" after
editing the file.
<b>BUGS</b>
The table format does not understand quoting conventions.
The table format does not understand quoting conventions.
<b>SEE ALSO</b>
<a href="postmap.1.html">postmap(1)</a>, Postfix lookup table manager
@ -405,7 +405,7 @@ ACCESS(5) ACCESS(5)
<a href="DATABASE_README.html">DATABASE_README</a>, Postfix lookup table overview
<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

@ -52,7 +52,7 @@ BOUNCE(5) BOUNCE(5)
something like:
/etc/postfix/<a href="postconf.5.html">main.cf</a>:
<a href="postconf.5.html#bounce_template_file">bounce_template_file</a> = /etc/postfix/bounce.cf
<a href="postconf.5.html#bounce_template_file">bounce_template_file</a> = /etc/postfix/bounce.cf
<b>TEMPLATE FILE FORMAT</b>
The template file can specify templates for failed mail,
@ -86,7 +86,7 @@ BOUNCE(5) BOUNCE(5)
If you do so, please include this problem report. You can
delete your own text from the attached returned message.
The mail system
The mail system
EOF
The usage and specification of bounce templates is subject

View File

@ -117,8 +117,10 @@ CANONICAL(5) CANONICAL(5)
applied to recipient addresses, the Postfix SMTP
server accepts mail for any recipient in <i>domain</i>,
regardless of whether that recipient exists. This
may turn your mail system into a backscatter source
that returns undeliverable spam to innocent people.
may turn your mail system into a backscatter
source: Postfix first accepts mail for non-existent
recipients and then tries to return that mail as
"undeliverable" to the often forged sender address.
<b>RESULT ADDRESS REWRITING</b>
The lookup result is subject to address rewriting:

View File

@ -161,12 +161,12 @@ GENERIC(5) GENERIC(5)
that the ISP supports "+" style address extensions).
/etc/postfix/<a href="postconf.5.html">main.cf</a>:
<a href="postconf.5.html#smtp_generic_maps">smtp_generic_maps</a> = hash:/etc/postfix/generic
<a href="postconf.5.html#smtp_generic_maps">smtp_generic_maps</a> = hash:/etc/postfix/generic
/etc/postfix/generic:
his@localdomain.local hisaccount@hisisp.example
her@localdomain.local heraccount@herisp.example
@localdomain.local hisaccount+local@hisisp.example
his@localdomain.local hisaccount@hisisp.example
her@localdomain.local heraccount@herisp.example
@localdomain.local hisaccount+local@hisisp.example
Execute the command "<b>postmap /etc/postfix/generic</b>" when-
ever the table is changed. Instead of <b>hash</b>, some systems

View File

@ -72,70 +72,75 @@ HEADER_CHECKS(5) HEADER_CHECKS(5)
time, even when a message header spans multiple lines.
Body lines are always examined one line at a time.
<b>COMPATIBILITY</b>
With Postfix version 2.2 and earlier specify "<b>postmap -fq</b>"
to query a table that contains case sensitive patterns. By
default, <a href="regexp_table.5.html">regexp</a>: and <a href="pcre_table.5.html">pcre</a>: patterns are case insensitive.
<b>TABLE FORMAT</b>
This document assumes that header and <a href="postconf.5.html#body_checks">body_checks</a> rules
are specified in the form of Postfix regular expression
lookup tables. Usually the best performance is obtained
This document assumes that header and <a href="postconf.5.html#body_checks">body_checks</a> rules
are specified in the form of Postfix regular expression
lookup tables. Usually the best performance is obtained
with <b>pcre</b> (Perl Compatible Regular Expression) tables, but
the slower <b>regexp</b> (POSIX regular expressions) support is
more widely available. Use the command "<b>postconf -m</b>" to
find out what lookup table types your Postfix system sup-
the slower <b>regexp</b> (POSIX regular expressions) support is
more widely available. Use the command "<b>postconf -m</b>" to
find out what lookup table types your Postfix system sup-
ports.
The general format of Postfix regular expression tables is
given below. For a discussion of specific pattern or
flags syntax, see <a href="pcre_table.5.html"><b>pcre_table</b>(5)</a> or <a href="regexp_table.5.html"><b>regexp_table</b>(5)</a>,
given below. For a discussion of specific pattern or
flags syntax, see <a href="pcre_table.5.html"><b>pcre_table</b>(5)</a> or <a href="regexp_table.5.html"><b>regexp_table</b>(5)</a>,
respectively.
<b>/</b><i>pattern</i><b>/</b><i>flags action</i>
When <i>pattern</i> matches the input string, execute the
corresponding <i>action</i>. See below for a list of pos-
When <i>pattern</i> matches the input string, execute the
corresponding <i>action</i>. See below for a list of pos-
sible actions.
<b>!/</b><i>pattern</i><b>/</b><i>flags action</i>
When <i>pattern</i> does <b>not</b> match the input string, exe-
When <i>pattern</i> does <b>not</b> match the input string, exe-
cute the corresponding <i>action</i>.
<b>if /</b><i>pattern</i><b>/</b><i>flags</i>
<b>endif</b> Match the input string against the patterns between
<b>if</b> and <b>endif</b>, if and only if the same input string
<b>if</b> and <b>endif</b>, if and only if the same input string
also matches <i>pattern</i>. The <b>if</b>..<b>endif</b> can nest.
Note: do not prepend whitespace to patterns inside
Note: do not prepend whitespace to patterns inside
<b>if</b>..<b>endif</b>.
<b>if !/</b><i>pattern</i><b>/</b><i>flags</i>
<b>endif</b> Match the input string against the patterns between
<b>if</b> and <b>endif</b>, if and only if the same input string
<b>if</b> and <b>endif</b>, if and only if the same input string
does <b>not</b> match <i>pattern</i>. The <b>if</b>..<b>endif</b> can nest.
blank lines and comments
Empty lines and whitespace-only lines are ignored,
as are lines whose first non-whitespace character
Empty lines and whitespace-only lines are ignored,
as are lines whose first non-whitespace character
is a `#'.
multi-line text
A pattern/action line starts with non-whitespace
text. A line that starts with whitespace continues
A pattern/action line starts with non-whitespace
text. A line that starts with whitespace continues
a logical line.
<b>TABLE SEARCH ORDER</b>
For each line of message input, the patterns are applied
in the order as specified in the table. When a pattern is
found that matches the input line, the corresponding
action is executed and then the next input line is
For each line of message input, the patterns are applied
in the order as specified in the table. When a pattern is
found that matches the input line, the corresponding
action is executed and then the next input line is
inspected.
<b>TEXT SUBSTITUTION</b>
Substitution of substrings from the matched expression
into the <i>action</i> string is possible using the conventional
Perl syntax (<b>$1</b>, <b>$2</b>, etc.). The macros in the result
string may need to be written as <b>${n}</b> or <b>$(n)</b> if they
Substitution of substrings from the matched expression
into the <i>action</i> string is possible using the conventional
Perl syntax (<b>$1</b>, <b>$2</b>, etc.). The macros in the result
string may need to be written as <b>${n}</b> or <b>$(n)</b> if they
aren't followed by whitespace.
Note: since negated patterns (those preceded by <b>!</b>) return
Note: since negated patterns (those preceded by <b>!</b>) return
a result when the expression does not match, substitutions
are not available for negated patterns.
@ -144,12 +149,12 @@ HEADER_CHECKS(5) HEADER_CHECKS(5)
case for consistency with other Postfix documentation.
<b>DISCARD</b> <i>optional text...</i>
Claim successful delivery and silently discard the
message. Log the optional text if specified, oth-
Claim successful delivery and silently discard the
message. Log the optional text if specified, oth-
erwise log a generic message.
Note: this action disables further header or
<a href="postconf.5.html#body_checks">body_checks</a> inspection of the current message and
Note: this action disables further header or
<a href="postconf.5.html#body_checks">body_checks</a> inspection of the current message and
affects all recipients. To discard only one recip-
ient without discarding the entire message, use the
<a href="transport.5.html">transport(5)</a> table to direct mail to the <a href="discard.8.html">discard(8)</a>
@ -157,49 +162,49 @@ HEADER_CHECKS(5) HEADER_CHECKS(5)
This feature is available in Postfix 2.0 and later.
<b>DUNNO</b> Pretend that the input line did not match any pat-
tern, and inspect the next input line. This action
<b>DUNNO</b> Pretend that the input line did not match any pat-
tern, and inspect the next input line. This action
can be used to shorten the table search.
For backwards compatibility reasons, Postfix also
accepts <b>OK</b> but it is (and always has been) treated
For backwards compatibility reasons, Postfix also
accepts <b>OK</b> but it is (and always has been) treated
as <b>DUNNO</b>.
This feature is available in Postfix 2.1 and later.
<b>FILTER</b> <i>transport:destination</i>
Write a content filter request to the queue file,
and inspect the next input line. After the com-
plete message is received it will be sent through
Write a content filter request to the queue file,
and inspect the next input line. After the com-
plete message is received it will be sent through
the specified external content filter. More infor-
mation about external content filters is in the
mation about external content filters is in the
Postfix <a href="FILTER_README.html">FILTER_README</a> file.
Note: this action overrides the <b><a href="postconf.5.html#content_filter">content_filter</a></b> set-
ting, and affects all recipients of the message. In
the case that multiple <b>FILTER</b> actions fire, only
the case that multiple <b>FILTER</b> actions fire, only
the last one is executed.
This feature is available in Postfix 2.0 and later.
<b>HOLD</b> <i>optional text...</i>
Arrange for the message to be placed on the <b>hold</b>
queue, and inspect the next input line. The mes-
sage remains on <b>hold</b> until someone either deletes
it or releases it for delivery. Log the optional
Arrange for the message to be placed on the <b>hold</b>
queue, and inspect the next input line. The mes-
sage remains on <b>hold</b> until someone either deletes
it or releases it for delivery. Log the optional
text if specified, otherwise log a generic message.
Mail that is placed on hold can be examined with
the <a href="postcat.1.html"><b>postcat</b>(1)</a> command, and can be destroyed or
Mail that is placed on hold can be examined with
the <a href="postcat.1.html"><b>postcat</b>(1)</a> command, and can be destroyed or
released with the <a href="postsuper.1.html"><b>postsuper</b>(1)</a> command.
Note: use "<b>postsuper -r</b>" to release mail that was
kept on hold for a significant fraction of <b>$<a href="postconf.5.html#maximal_queue_lifetime">maxi</a>-</b>
Note: use "<b>postsuper -r</b>" to release mail that was
kept on hold for a significant fraction of <b>$<a href="postconf.5.html#maximal_queue_lifetime">maxi</a>-</b>
<b><a href="postconf.5.html#maximal_queue_lifetime">mal_queue_lifetime</a></b> or <b>$<a href="postconf.5.html#bounce_queue_lifetime">bounce_queue_lifetime</a></b>, or
longer. Use "<b>postsuper -H</b>" only for mail that will
longer. Use "<b>postsuper -H</b>" only for mail that will
not expire within a few delivery attempts.
Note: this action affects all recipients of the
Note: this action affects all recipients of the
message.
This feature is available in Postfix 2.0 and later.
@ -208,23 +213,23 @@ HEADER_CHECKS(5) HEADER_CHECKS(5)
the next input line.
<b>PREPEND</b> <i>text...</i>
Prepend one line with the specified text, and
Prepend one line with the specified text, and
inspect the next input line.
Notes:
<b>o</b> The prepended text is output on a separate
<b>o</b> The prepended text is output on a separate
line, immediately before the input that
triggered the <b>PREPEND</b> action.
<b>o</b> The prepended text is not considered part of
the input stream: it is not subject to
the input stream: it is not subject to
header/body checks or address rewriting, and
it does not affect the way that Postfix adds
missing message headers.
<b>o</b> When prepending text before a message header
line, the prepended text must begin with a
line, the prepended text must begin with a
valid message header label.
<b>o</b> This action cannot be used to prepend multi-
@ -233,46 +238,46 @@ HEADER_CHECKS(5) HEADER_CHECKS(5)
This feature is available in Postfix 2.1 and later.
<b>REDIRECT</b> <i>user@domain</i>
Write a message redirection request to the queue
file, and inspect the next input line. After the
Write a message redirection request to the queue
file, and inspect the next input line. After the
message is queued, it will be sent to the specified
address instead of the intended recipient(s).
Note: this action overrides the <b>FILTER</b> action, and
affects all recipients of the message. If multiple
<b>REDIRECT</b> actions fire, only the last one is exe-
Note: this action overrides the <b>FILTER</b> action, and
affects all recipients of the message. If multiple
<b>REDIRECT</b> actions fire, only the last one is exe-
cuted.
This feature is available in Postfix 2.1 and later.
<b>REPLACE</b> <i>text...</i>
Replace the current line with the specified text,
Replace the current line with the specified text,
and inspect the next input line.
This feature is available in Postfix 2.2 and later.
The description below applies to Postfix 2.2.2 and
The description below applies to Postfix 2.2.2 and
later.
Notes:
<b>o</b> When replacing a message header line, the
replacement text must begin with a valid
<b>o</b> When replacing a message header line, the
replacement text must begin with a valid
header label.
<b>o</b> The replaced text remains part of the input
stream. Unlike the result from the <b>PREPEND</b>
action, a replaced message header may be
subject to address rewriting and may affect
the way that Postfix adds missing message
<b>o</b> The replaced text remains part of the input
stream. Unlike the result from the <b>PREPEND</b>
action, a replaced message header may be
subject to address rewriting and may affect
the way that Postfix adds missing message
headers.
<b>REJECT</b> <i>optional text...</i>
Reject the entire message. Reply with <i>optional</i>
Reject the entire message. Reply with <i>optional</i>
<i>text...</i> when the optional text is specified, other-
wise reply with a generic error message.
Note: this action disables further header or
<a href="postconf.5.html#body_checks">body_checks</a> inspection of the current message and
Note: this action disables further header or
<a href="postconf.5.html#body_checks">body_checks</a> inspection of the current message and
affects all recipients.
Postfix version 2.3 and later support enhanced sta-
@ -281,32 +286,32 @@ HEADER_CHECKS(5) HEADER_CHECKS(5)
enhanced status code of "5.7.1".
<b>WARN</b> <i>optional text...</i>
Log a warning with the <i>optional text...</i> (or log a
generic message), and inspect the next input line.
Log a warning with the <i>optional text...</i> (or log a
generic message), and inspect the next input line.
This action is useful for debugging and for testing
a pattern before applying more drastic actions.
<b>BUGS</b>
Many people overlook the main limitations of header and
Many people overlook the main limitations of header and
<a href="postconf.5.html#body_checks">body_checks</a> rules.
<b>o</b> These rules operate on one logical message header
<b>o</b> These rules operate on one logical message header
or one body line at a time. A decision made for one
line is not carried over to the next line.
<b>o</b> If text in the message body is encoded (<a href="http://www.faqs.org/rfcs/rfc2045.html">RFC 2045</a>)
then the rules have to specified for the encoded
<b>o</b> If text in the message body is encoded (<a href="http://www.faqs.org/rfcs/rfc2045.html">RFC 2045</a>)
then the rules need to be specified for the encoded
form.
<b>o</b> Likewise, when message headers are encoded (<a href="http://www.faqs.org/rfcs/rfc2047.html">RFC</a>
<a href="http://www.faqs.org/rfcs/rfc2047.html">2047</a>) then the rules need to be specified for the
<b>o</b> Likewise, when message headers are encoded (<a href="http://www.faqs.org/rfcs/rfc2047.html">RFC</a>
<a href="http://www.faqs.org/rfcs/rfc2047.html">2047</a>) then the rules need to be specified for the
encoded form.
Message headers added by the <a href="cleanup.8.html"><b>cleanup</b>(8)</a> daemon itself are
Message headers added by the <a href="cleanup.8.html"><b>cleanup</b>(8)</a> daemon itself are
excluded from inspection. Examples of such message headers
are <b>From:</b>, <b>To:</b>, <b>Message-ID:</b>, <b>Date:</b>.
Message headers deleted by the <a href="cleanup.8.html"><b>cleanup</b>(8)</a> daemon will be
Message headers deleted by the <a href="cleanup.8.html"><b>cleanup</b>(8)</a> daemon will be
examined before they are deleted. Examples are: <b>Bcc:, Con-</b>
<b>tent-Length:</b>, <b>Return-Path:</b>.
@ -314,11 +319,11 @@ HEADER_CHECKS(5) HEADER_CHECKS(5)
<b><a href="postconf.5.html#body_checks">body_checks</a></b>
Lookup tables with content filter rules for message
body lines. These filters see one physical line at
a time, in chunks of at most <b>$<a href="postconf.5.html#line_length_limit">line_length_limit</a></b>
a time, in chunks of at most <b>$<a href="postconf.5.html#line_length_limit">line_length_limit</a></b>
bytes.
<b><a href="postconf.5.html#body_checks_size_limit">body_checks_size_limit</a></b>
The amount of content per message body segment
The amount of content per message body segment
(attachment) that is subjected to <b>$<a href="postconf.5.html#body_checks">body_checks</a></b> fil-
tering.
@ -328,32 +333,32 @@ HEADER_CHECKS(5) HEADER_CHECKS(5)
<b><a href="postconf.5.html#nested_header_checks">nested_header_checks</a></b> (default: <b>$<a href="postconf.5.html#header_checks">header_checks</a></b>)
Lookup tables with content filter rules for message
header lines: respectively, these are applied to
the initial message headers (not including MIME
headers), to the MIME headers anywhere in the mes-
sage, and to the initial headers of attached mes-
header lines: respectively, these are applied to
the initial message headers (not including MIME
headers), to the MIME headers anywhere in the mes-
sage, and to the initial headers of attached mes-
sages.
Note: these filters see one logical message header
at a time, even when a message header spans multi-
ple lines. Message headers that are longer than
Note: these filters see one logical message header
at a time, even when a message header spans multi-
ple lines. Message headers that are longer than
<b>$<a href="postconf.5.html#header_size_limit">header_size_limit</a></b> characters are truncated.
<b><a href="postconf.5.html#disable_mime_input_processing">disable_mime_input_processing</a></b>
While receiving mail, give no special treatment to
MIME related message headers; all text after the
While receiving mail, give no special treatment to
MIME related message headers; all text after the
initial message headers is considered to be part of
the message body. This means that <b><a href="postconf.5.html#header_checks">header_checks</a></b> is
applied to all the initial message headers, and
the message body. This means that <b><a href="postconf.5.html#header_checks">header_checks</a></b> is
applied to all the initial message headers, and
that <b><a href="postconf.5.html#body_checks">body_checks</a></b> is applied to the remainder of the
message.
Note: when used in this manner, <b><a href="postconf.5.html#body_checks">body_checks</a></b> will
process a multi-line message header one line at a
Note: when used in this manner, <b><a href="postconf.5.html#body_checks">body_checks</a></b> will
process a multi-line message header one line at a
time.
<b>EXAMPLES</b>
Header pattern to block attachments with bad file name
Header pattern to block attachments with bad file name
extensions.
/etc/postfix/<a href="postconf.5.html">main.cf</a>:
@ -391,7 +396,7 @@ HEADER_CHECKS(5) HEADER_CHECKS(5)
<a href="BACKSCATTER_README.html">BACKSCATTER_README</a>, blocking returned forged mail
<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

@ -327,19 +327,18 @@ LDAP_TABLE(5) LDAP_TABLE(5)
are not performed. This can significantly reduce
the query load on the LDAP server.
domain = postfix.org, hash:/etc/postfix/search-
domains
domain = postfix.org, hash:/etc/postfix/searchdomains
It is best not to use LDAP to store the domains
It is best not to use LDAP to store the domains
eligible for LDAP lookups.
NOTE: DO NOT define this parameter for <a href="local.8.html">local(8)</a>
NOTE: DO NOT define this parameter for <a href="local.8.html">local(8)</a>
aliases.
This feature is available in Postfix 1.0 and later.
<b>result_attribute (default: maildrop)</b>
The attribute(s) Postfix will read from any direc-
The attribute(s) Postfix will read from any direc-
tory entries returned by the lookup, to be resolved
to an email address.
@ -347,57 +346,57 @@ LDAP_TABLE(5) LDAP_TABLE(5)
<b>special_result_attribute (default: empty)</b>
The attribute(s) of directory entries that can con-
tain DNs or URLs. If found, a recursive subsequent
tain DNs or URLs. If found, a recursive subsequent
search is done using their values.
special_result_attribute = memberdn
DN recursion retrieves the same result_attributes
DN recursion retrieves the same result_attributes
as the main query, including the special attributes
for further recursion. URI processing retrieves
only those attributes that are included in the URI
definition and are *also* listed in
"result_attribute". If the URI lists any of the
map's special result attributes, these are also
for further recursion. URI processing retrieves
only those attributes that are included in the URI
definition and are *also* listed in
"result_attribute". If the URI lists any of the
map's special result attributes, these are also
retrieved and used recursively.
<b>terminal_result_attribute (default: empty)</b>
When one or more terminal result attributes are
When one or more terminal result attributes are
found in an LDAP entry, all other result attributes
are ignored and only the terminal result attributes
are returned. This is useful for delegating expan-
sion of group members to a particular host, by
using an optional "maildrop" attribute on selected
are returned. This is useful for delegating expan-
sion of group members to a particular host, by
using an optional "maildrop" attribute on selected
groups to route the group to a specific host, where
the group is expanded, possibly via mailing-list
the group is expanded, possibly via mailing-list
manager or other special processing.
terminal_result_attribute = maildrop
This feature is available with Postfix 2.4 or
This feature is available with Postfix 2.4 or
later.
<b>leaf_result_attribute (default: empty)</b>
When one or more special result attributes are
found in a non-terminal (see above) LDAP entry,
When one or more special result attributes are
found in a non-terminal (see above) LDAP entry,
leaf result attributes are excluded from the expan-
sion of that entry. This is useful when expanding
sion of that entry. This is useful when expanding
groups and the desired mail address attribute(s) of
the member objects obtained via DN or URI recursion
are also present in the group object. To only
return the attribute values from the leaf objects
and not the containing group, add the attribute to
the leaf_result_attribute list, and not the
result_attribute list, which is always expanded.
Note, the default value of "result_attribute" is
not empty, you may want to set it explicitly empty
when using "leaf_result_attribute" to expand the
group to a list of member DN addresses. If groups
have both member DN references AND attributes that
hold multiple string valued rfc822 addresses, then
the string attributes go in "result_attribute".
The attributes that represent the email addresses
of objects referenced via a DN (or LDAP URI) go in
are also present in the group object. To only
return the attribute values from the leaf objects
and not the containing group, add the attribute to
the leaf_result_attribute list, and not the
result_attribute list, which is always expanded.
Note, the default value of "result_attribute" is
not empty, you may want to set it explicitly empty
when using "leaf_result_attribute" to expand the
group to a list of member DN addresses. If groups
have both member DN references AND attributes that
hold multiple string valued rfc822 addresses, then
the string attributes go in "result_attribute".
The attributes that represent the email addresses
of objects referenced via a DN (or LDAP URI) go in
"leaf_result_attribute".
result_attribute = memberaddr
@ -405,42 +404,42 @@ LDAP_TABLE(5) LDAP_TABLE(5)
terminal_result_attribute = maildrop
leaf_result_attribute = mail
This feature is available with Postfix 2.4 or
This feature is available with Postfix 2.4 or
later.
<b>scope (default: sub)</b>
The LDAP search scope: <b>sub</b>, <b>base</b>, or <b>one</b>. These
The LDAP search scope: <b>sub</b>, <b>base</b>, or <b>one</b>. These
translate into LDAP_SCOPE_SUBTREE, LDAP_SCOPE_BASE,
and LDAP_SCOPE_ONELEVEL.
<b>bind (default: yes)</b>
Whether or not to bind to the LDAP server. Newer
Whether or not to bind to the LDAP server. Newer
LDAP implementations don't require clients to bind,
which saves time. Example:
bind = no
If you do need to bind, you might consider config-
uring Postfix to connect to the local machine on a
port that's an SSL tunnel to your LDAP server. If
your LDAP server doesn't natively support SSL, put
If you do need to bind, you might consider config-
uring Postfix to connect to the local machine on a
port that's an SSL tunnel to your LDAP server. If
your LDAP server doesn't natively support SSL, put
a tunnel (wrapper, proxy, whatever you want to call
it) on that system too. This should prevent the
password from traversing the network in the clear.
it) on that system too. This should prevent the
password from traversing the network in the clear.
<b>bind_dn (default: empty)</b>
If you do have to bind, do it with this distin-
If you do have to bind, do it with this distin-
guished name. Example:
bind_dn = uid=postfix, dc=your, dc=com
<b>bind_pw (default: empty)</b>
The password for the distinguished name above. If
The password for the distinguished name above. If
you have to use this, you probably want to make the
map configuration file readable only by the Postfix
user. When using the obsolete <a href="ldap_table.5.html">ldap</a>:ldapsource syn-
user. When using the obsolete <a href="ldap_table.5.html">ldap</a>:ldapsource syn-
tax, with map parameters in <a href="postconf.5.html">main.cf</a>, it is not pos-
sible to securely store the bind password. This is
sible to securely store the bind password. This is
because <a href="postconf.5.html">main.cf</a> needs to be world readable to allow
local accounts to submit mail via the sendmail com-
mand. Example:
@ -452,43 +451,43 @@ LDAP_TABLE(5) LDAP_TABLE(5)
<b>cache_expiry (IGNORED with a warning)</b>
<b>cache_size (IGNORED with a warning)</b>
The above parameters are NO LONGER SUPPORTED by
The above parameters are NO LONGER SUPPORTED by
Postfix. Cache support has been dropped from
OpenLDAP as of release 2.1.13.
<b>recursion_limit (default: 1000)</b>
A limit on the nesting depth of DN and URL special
result attribute evaluation. The limit must be a
A limit on the nesting depth of DN and URL special
result attribute evaluation. The limit must be a
non-zero positive number.
<b>expansion_limit (default: 0)</b>
A limit on the total number of result elements
returned (as a comma separated list) by a lookup
against the map. A setting of zero disables the
limit. Lookups fail with a temporary error if the
limit is exceeded. Setting the limit to 1 ensures
A limit on the total number of result elements
returned (as a comma separated list) by a lookup
against the map. A setting of zero disables the
limit. Lookups fail with a temporary error if the
limit is exceeded. Setting the limit to 1 ensures
that lookups do not return multiple values.
<b>size_limit (default: $expansion_limit)</b>
A limit on the number of LDAP entries returned by
any single LDAP search performed as part of the
lookup. A setting of 0 disables the limit. Expan-
sion of DN and URL references involves nested LDAP
queries, each of which is separately subjected to
A limit on the number of LDAP entries returned by
any single LDAP search performed as part of the
lookup. A setting of 0 disables the limit. Expan-
sion of DN and URL references involves nested LDAP
queries, each of which is separately subjected to
this limit.
Note: even a single LDAP entry can generate multi-
ple lookup results, via multiple result attributes
and/or multi-valued result attributes. This limit
caps the per search resource utilization on the
LDAP server, not the final multiplicity of the
lookup result. It is analogous to the "-z" option
Note: even a single LDAP entry can generate multi-
ple lookup results, via multiple result attributes
and/or multi-valued result attributes. This limit
caps the per search resource utilization on the
LDAP server, not the final multiplicity of the
lookup result. It is analogous to the "-z" option
of "ldapsearch".
<b>dereference (default: 0)</b>
When to dereference LDAP aliases. (Note that this
When to dereference LDAP aliases. (Note that this
has nothing do with Postfix aliases.) The permitted
values are those legal for the OpenLDAP/UM LDAP
values are those legal for the OpenLDAP/UM LDAP
implementations:
0 never
@ -500,28 +499,28 @@ LDAP_TABLE(5) LDAP_TABLE(5)
3 always
See ldap.h or the ldap_open(3) or ldapsearch(1) man
pages for more information. And if you're using an
pages for more information. And if you're using an
LDAP package that has other possible values, please
bring it to the attention of the postfix-
bring it to the attention of the postfix-
users@postfix.org mailing list.
<b>chase_referrals (default: 0)</b>
Sets (or clears) LDAP_OPT_REFERRALS (requires LDAP
Sets (or clears) LDAP_OPT_REFERRALS (requires LDAP
version 3 support).
<b>version (default: 2)</b>
Specifies the LDAP protocol version to use.
<b>debuglevel (default: 0)</b>
What level to set for debugging in the OpenLDAP
What level to set for debugging in the OpenLDAP
libraries.
<b>LDAP SSL AND STARTTLS PARAMETERS</b>
If you're using the OpenLDAP libraries compiled with SSL
support, Postfix can connect to LDAP SSL servers and can
If you're using the OpenLDAP libraries compiled with SSL
support, Postfix can connect to LDAP SSL servers and can
issue the STARTTLS command.
LDAP SSL service can be requested by using a LDAP SSL URL
LDAP SSL service can be requested by using a LDAP SSL URL
in the server_host parameter:
server_host = ldaps://ldap.example.com:636
@ -530,90 +529,90 @@ LDAP_TABLE(5) LDAP_TABLE(5)
start_tls = yes
Both forms require LDAP protocol version 3, which has to
Both forms require LDAP protocol version 3, which has to
be set explicitly with:
version = 3
If any of the Postfix programs querying the map is config-
ured in <a href="master.5.html">master.cf</a> to run chrooted, all the certificates
ured in <a href="master.5.html">master.cf</a> to run chrooted, all the certificates
and keys involved have to be copied to the chroot jail. Of
course, the private keys should only be readable by the
course, the private keys should only be readable by the
user "postfix".
The following parameters are relevant to LDAP SSL and
The following parameters are relevant to LDAP SSL and
STARTTLS:
<b>start_tls (default: no)</b>
Whether or not to issue STARTTLS upon connection to
the server. Don't set this with LDAP SSL (the SSL
the server. Don't set this with LDAP SSL (the SSL
session is setup automatically when the TCP connec-
tion is opened).
<b>tls_ca_cert_dir (No default; set either this or</b>
<b>tls_ca_cert_dir (No default; set either this or</b>
<b>tls_ca_cert_file)</b>
Directory containing X509 Certificate Authority
certificates in PEM format which are to be recog-
nized by the client in SSL/TLS connections. The
files each contain one CA certificate. The files
are looked up by the CA subject name hash value,
which must hence be available. If more than one CA
certificate with the same name hash value exist,
the extension must be different (e.g. 9d66eef0.0,
9d66eef0.1 etc). The search is performed in the
ordering of the extension number, regardless of
certificates in PEM format which are to be recog-
nized by the client in SSL/TLS connections. The
files each contain one CA certificate. The files
are looked up by the CA subject name hash value,
which must hence be available. If more than one CA
certificate with the same name hash value exist,
the extension must be different (e.g. 9d66eef0.0,
9d66eef0.1 etc). The search is performed in the
ordering of the extension number, regardless of
other properties of the certificates. Use the
c_rehash utility (from the OpenSSL distribution) to
create the necessary links.
<b>tls_ca_cert_file (No default; set either this or</b>
<b>tls_ca_cert_file (No default; set either this or</b>
<b>tls_ca_cert_dir)</b>
File containing the X509 Certificate Authority cer-
tificates in PEM format which are to be recognized
by the client in SSL/TLS connections. This setting
tificates in PEM format which are to be recognized
by the client in SSL/TLS connections. This setting
takes precedence over tls_ca_cert_dir.
<b>tls_cert (No default; you must set this)</b>
File containing client's X509 certificate to be
File containing client's X509 certificate to be
used by the client in SSL/ TLS connections.
<b>tls_key (No default; you must set this)</b>
File containing the private key corresponding to
File containing the private key corresponding to
the above tls_cert.
<b>tls_require_cert (default: no)</b>
Whether or not to request server's X509 certificate
and check its validity when establishing SSL/TLS
and check its validity when establishing SSL/TLS
connections.
<b>tls_random_file (No default)</b>
Path of a file to obtain random bits from when
/dev/[u]random is not available, to be used by the
Path of a file to obtain random bits from when
/dev/[u]random is not available, to be used by the
client in SSL/TLS connections.
<b>tls_cipher_suite (No default)</b>
Cipher suite to use in SSL/TLS negotiations.
<b>EXAMPLE</b>
Here's a basic example for using LDAP to look up <a href="local.8.html">local(8)</a>
Here's a basic example for using LDAP to look up <a href="local.8.html">local(8)</a>
aliases. Assume that in <a href="postconf.5.html">main.cf</a>, you have:
<a href="postconf.5.html#alias_maps">alias_maps</a> = hash:/etc/aliases,
<a href="ldap_table.5.html">ldap</a>:/etc/postfix/ldap-aliases.cf
<a href="ldap_table.5.html">ldap</a>:/etc/postfix/ldap-aliases.cf
and in <a href="ldap_table.5.html">ldap</a>:/etc/postfix/ldap-aliases.cf you have:
server_host = ldap.example.com
search_base = dc=example, dc=com
Upon receiving mail for a local address "ldapuser" that
isn't found in the /etc/aliases database, Postfix will
Upon receiving mail for a local address "ldapuser" that
isn't found in the /etc/aliases database, Postfix will
search the LDAP server listening at port 389 on ldap.exam-
ple.com. It will bind anonymously, search for any direc-
tory entries whose mailacceptinggeneralid attribute is
ple.com. It will bind anonymously, search for any direc-
tory entries whose mailacceptinggeneralid attribute is
"ldapuser", read the "maildrop" attributes of those found,
and build a list of their maildrops, which will be treated
as <a href="http://www.faqs.org/rfcs/rfc822.html">RFC822</a> addresses to which the message will be deliv-
as <a href="http://www.faqs.org/rfcs/rfc822.html">RFC822</a> addresses to which the message will be deliv-
ered.
<b>SEE ALSO</b>
@ -627,13 +626,13 @@ LDAP_TABLE(5) LDAP_TABLE(5)
<a href="LDAP_README.html">LDAP_README</a>, Postfix LDAP client guide
<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>
Carsten Hoeger, Hery Rakotoarisoa, John Hensley, Keith
Stevenson, LaMont Jones, Liviu Daia, Manuel Guesdon, Mike
Mattice, Prabhat K Singh, Sami Haahtinen, Samuel Tardieu,
Carsten Hoeger, Hery Rakotoarisoa, John Hensley, Keith
Stevenson, LaMont Jones, Liviu Daia, Manuel Guesdon, Mike
Mattice, Prabhat K Singh, Sami Haahtinen, Samuel Tardieu,
Victor Duchovni, and many others.
LDAP_TABLE(5)

View File

@ -21,26 +21,26 @@ MYSQL_TABLE(5) MYSQL_TABLE(5)
Alternatively, lookup tables can be specified as MySQL
databases. In order to use MySQL lookups, define a MySQL
source as a lookup table in main.cf, for example:
source as a lookup table in <a href="postconf.5.html">main.cf</a>, for example:
<a href="postconf.5.html#alias_maps">alias_maps</a> = <a href="mysql_table.5.html">mysql</a>:/etc/mysql-aliases.cf
The file /etc/postfix/mysql-aliases.cf has the same format
as the Postfix main.cf file, and can specify the parame-
as the Postfix <a href="postconf.5.html">main.cf</a> file, and can specify the parame-
ters described below.
<b>BACKWARDS COMPATIBILITY</b>
For compatibility with other Postfix lookup tables, MySQL
parameters can also be defined in main.cf. In order to do
parameters can also be defined in <a href="postconf.5.html">main.cf</a>. In order to do
that, specify as MySQL source a name that doesn't begin
with a slash or a dot. The MySQL parameters will then be
accessible as the name you've given the source in its def-
inition, an underscore, and the name of the parameter.
For example, if the map is specified as "<a href="mysql_table.5.html">mysql</a>:<i>mysqlname</i>",
the parameter "hosts" below would be defined in main.cf as
the parameter "hosts" below would be defined in <a href="postconf.5.html">main.cf</a> as
"<i>mysqlname</i>_hosts".
Note: with this form, the passwords for the MySQL sources
are written in main.cf, which is normally world-readable.
are written in <a href="postconf.5.html">main.cf</a>, which is normally world-readable.
Support for this form will be removed in a future Postfix
version.
@ -115,58 +115,57 @@ MYSQL_TABLE(5) MYSQL_TABLE(5)
<b>query</b> The SQL query template used to search the database,
where <b>%s</b> is a substitute for the address Postfix is
trying to resolve, e.g.
query = SELECT replacement FROM aliases WHERE
mailbox = '%s'
query = SELECT replacement FROM aliases WHERE mailbox = '%s'
This parameter supports the following '%' expan-
This parameter supports the following '%' expan-
sions:
<b>%%</b> This is replaced by a literal '%' character.
<b>%s</b> This is replaced by the input key. SQL
quoting is used to make sure that the input
key does not add unexpected metacharacters.
<b>%s</b> This is replaced by the input key. SQL
quoting is used to make sure that the input
key does not add unexpected metacharacters.
<b>%u</b> When the input key is an address of the form
user@domain, <b>%u</b> is replaced by the SQL
quoted local part of the address. Other-
wise, <b>%u</b> is replaced by the entire search
string. If the localpart is empty, the
query is suppressed and returns no results.
quoted local part of the address. Other-
wise, <b>%u</b> is replaced by the entire search
string. If the localpart is empty, the
query is suppressed and returns no results.
<b>%d</b> When the input key is an address of the form
user@domain, <b>%d</b> is replaced by the SQL
quoted domain part of the address. Other-
quoted domain part of the address. Other-
wise, the query is suppressed and returns no
results.
<b>%[SUD]</b> The upper-case equivalents of the above
expansions behave in the <b>query</b> parameter
expansions behave in the <b>query</b> parameter
identically to their lower-case counter-
parts. With the <b>result_format</b> parameter
(see below), they expand the input key
rather than the result value.
<b>%[1-9]</b> The patterns %1, %2, ... %9 are replaced by
<b>%[1-9]</b> The patterns %1, %2, ... %9 are replaced by
the corresponding most significant component
of the input key's domain. If the input key
of the input key's domain. If the input key
is <i>user@mail.example.com</i>, then %1 is <b>com</b>, %2
is <b>example</b> and %3 is <b>mail</b>. If the input key
is <b>example</b> and %3 is <b>mail</b>. If the input key
is unqualified or does not have enough
domain components to satisfy all the speci-
fied patterns, the query is suppressed and
domain components to satisfy all the speci-
fied patterns, the query is suppressed and
returns no results.
The <b>domain</b> parameter described below limits the
input keys to addresses in matching domains. When
the <b>domain</b> parameter is non-empty, SQL queries for
unqualified addresses or addresses in non-matching
The <b>domain</b> parameter described below limits the
input keys to addresses in matching domains. When
the <b>domain</b> parameter is non-empty, SQL queries for
unqualified addresses or addresses in non-matching
domains are suppressed and return no results.
This parameter is available with Postfix 2.2. In
prior releases the SQL query was built from the
separate parameters: <b>select_field</b>, <b>table</b>,
<b>where_field</b> and <b>additional_conditions</b>. The mapping
This parameter is available with Postfix 2.2. In
prior releases the SQL query was built from the
separate parameters: <b>select_field</b>, <b>table</b>,
<b>where_field</b> and <b>additional_conditions</b>. The mapping
from the old parameters to the equivalent query is:
SELECT [<b>select_field</b>]
@ -176,72 +175,71 @@ MYSQL_TABLE(5) MYSQL_TABLE(5)
The '%s' in the <b>WHERE</b> clause expands to the escaped
search string. With Postfix 2.2 these legacy
parameters are used if the <b>query</b> parameter is not
parameters are used if the <b>query</b> parameter is not
specified.
NOTE: DO NOT put quotes around the query parameter.
<b>result_format (default: %s</b>)
Format template applied to result attributes. Most
commonly used to append (or prepend) text to the
result. This parameter supports the following '%'
Format template applied to result attributes. Most
commonly used to append (or prepend) text to the
result. This parameter supports the following '%'
expansions:
<b>%%</b> This is replaced by a literal '%' character.
<b>%s</b> This is replaced by the value of the result
attribute. When result is empty it is
<b>%s</b> This is replaced by the value of the result
attribute. When result is empty it is
skipped.
<b>%u</b> When the result attribute value is an
<b>%u</b> When the result attribute value is an
address of the form user@domain, <b>%u</b> is
replaced by the local part of the address.
replaced by the local part of the address.
When the result has an empty localpart it is
skipped.
<b>%d</b> When a result attribute value is an address
of the form user@domain, <b>%d</b> is replaced by
<b>%d</b> When a result attribute value is an address
of the form user@domain, <b>%d</b> is replaced by
the domain part of the attribute value. When
the result is unqualified it is skipped.
<b>%[SUD1-9]</b>
The upper-case and decimal digit expansions
The upper-case and decimal digit expansions
interpolate the parts of the input key
rather than the result. Their behavior is
identical to that described with <b>query</b>, and
in fact because the input key is known in
advance, queries whose key does not contain
all the information specified in the result
template are suppressed and return no
rather than the result. Their behavior is
identical to that described with <b>query</b>, and
in fact because the input key is known in
advance, queries whose key does not contain
all the information specified in the result
template are suppressed and return no
results.
For example, using "result_format = <a href="smtp.8.html">smtp</a>:[%s]"
allows one to use a mailHost attribute as the basis
of a <a href="transport.5.html">transport(5)</a> table. After applying the result
format, multiple values are concatenated as comma
separated strings. The expansion_limit and parame-
of a <a href="transport.5.html">transport(5)</a> table. After applying the result
format, multiple values are concatenated as comma
separated strings. The expansion_limit and parame-
ter explained below allows one to restrict the num-
ber of values in the result, which is especially
ber of values in the result, which is especially
useful for maps that must return at most one value.
The default value <b>%s</b> specifies that each result
The default value <b>%s</b> specifies that each result
value should be used as is.
This parameter is available with Postfix 2.2 and
This parameter is available with Postfix 2.2 and
later.
NOTE: DO NOT put quotes around the result format!
<b>domain (default: no domain list)</b>
This is a list of domain names, paths to files, or
dictionaries. When specified, only fully qualified
search keys with a *non-empty* localpart and a
matching domain are eligible for lookup: 'user'
lookups, bare domain lookups and "@domain" lookups
are not performed. This can significantly reduce
This is a list of domain names, paths to files, or
dictionaries. When specified, only fully qualified
search keys with a *non-empty* localpart and a
matching domain are eligible for lookup: 'user'
lookups, bare domain lookups and "@domain" lookups
are not performed. This can significantly reduce
the query load on the MySQL server.
domain = postfix.org, hash:/etc/postfix/search-
domains
domain = postfix.org, hash:/etc/postfix/searchdomains
It is best not to use SQL to store the domains eli-
gible for SQL lookups.

View File

@ -55,7 +55,7 @@ NISPLUS_TABLE(5) NISPLUS_TABLE(5)
A NIS+ aliases map might be queried as follows:
<a href="postconf.5.html#alias_maps">alias_maps</a> = dbm:/etc/mail/aliases,
<a href="nisplus_table.5.html">nisplus</a>:[alias=%s];mail_aliases.org_dir.$<a href="postconf.5.html#mydomain">mydomain</a>.:1
<a href="nisplus_table.5.html">nisplus</a>:[alias=%s];mail_aliases.org_dir.$<a href="postconf.5.html#mydomain">mydomain</a>.:1
This queries the local aliases file before the NIS+ file.

View File

@ -16,8 +16,8 @@ PCRE_TABLE(5) PCRE_TABLE(5)
<b>DESCRIPTION</b>
The Postfix mail system uses optional tables for address
rewriting or mail routing. These tables are usually in <b>dbm</b>
or <b>db</b> format.
rewriting, mail routing, or access control. These tables
are usually in <b>dbm</b> or <b>db</b> format.
Alternatively, lookup tables can be specified in Perl Com-
patible Regular Expression form. In this case, each input

View File

@ -21,27 +21,27 @@ PGSQL_TABLE(5) PGSQL_TABLE(5)
Alternatively, lookup tables can be specified as Post-
greSQL databases. In order to use PostgreSQL lookups,
define a PostgreSQL source as a lookup table in main.cf,
define a PostgreSQL source as a lookup table in <a href="postconf.5.html">main.cf</a>,
for example:
<a href="postconf.5.html#alias_maps">alias_maps</a> = <a href="pgsql_table.5.html">pgsql</a>:/etc/pgsql-aliases.cf
The file /etc/postfix/pgsql-aliases.cf has the same format
as the Postfix main.cf file, and can specify the parame-
as the Postfix <a href="postconf.5.html">main.cf</a> file, and can specify the parame-
ters described below.
<b>BACKWARDS COMPATIBILITY</b>
For compatibility with other Postfix lookup tables, Post-
greSQL parameters can also be defined in main.cf. In
greSQL parameters can also be defined in <a href="postconf.5.html">main.cf</a>. In
order to do that, specify as PostgreSQL source a name that
doesn't begin with a slash or a dot. The PostgreSQL
parameters will then be accessible as the name you've
given the source in its definition, an underscore, and the
name of the parameter. For example, if the map is speci-
fied as "<a href="pgsql_table.5.html">pgsql</a>:<i>pgsqlname</i>", the parameter "hosts" below
would be defined in main.cf as "<i>pgsqlname</i>_hosts".
would be defined in <a href="postconf.5.html">main.cf</a> as "<i>pgsqlname</i>_hosts".
Note: with this form, the passwords for the PostgreSQL
sources are written in main.cf, which is normally world-
sources are written in <a href="postconf.5.html">main.cf</a>, which is normally world-
readable. Support for this form will be removed in a
future Postfix version.
@ -121,132 +121,130 @@ PGSQL_TABLE(5) PGSQL_TABLE(5)
<b>query</b> The SQL query template used to search the database,
where <b>%s</b> is a substitute for the address Postfix is
trying to resolve, e.g.
query = SELECT replacement FROM aliases WHERE
mailbox = '%s'
query = SELECT replacement FROM aliases WHERE mailbox = '%s'
This parameter supports the following '%' expan-
This parameter supports the following '%' expan-
sions:
<b>%%</b> This is replaced by a literal '%' character.
(Postfix 2.2 and later)
<b>%s</b> This is replaced by the input key. SQL
quoting is used to make sure that the input
key does not add unexpected metacharacters.
<b>%s</b> This is replaced by the input key. SQL
quoting is used to make sure that the input
key does not add unexpected metacharacters.
<b>%u</b> When the input key is an address of the form
user@domain, <b>%u</b> is replaced by the SQL
quoted local part of the address. Other-
wise, <b>%u</b> is replaced by the entire search
string. If the localpart is empty, the
query is suppressed and returns no results.
quoted local part of the address. Other-
wise, <b>%u</b> is replaced by the entire search
string. If the localpart is empty, the
query is suppressed and returns no results.
<b>%d</b> When the input key is an address of the form
user@domain, <b>%d</b> is replaced by the SQL
quoted domain part of the address. Other-
quoted domain part of the address. Other-
wise, the query is suppressed and returns no
results.
<b>%[SUD]</b> The upper-case equivalents of the above
expansions behave in the <b>query</b> parameter
expansions behave in the <b>query</b> parameter
identically to their lower-case counter-
parts. With the <b>result_format</b> parameter
(see below), they expand the input key
rather than the result value.
The above %S, %U and %D expansions are
The above %S, %U and %D expansions are
available with Postfix 2.2 and later
<b>%[1-9]</b> The patterns %1, %2, ... %9 are replaced by
<b>%[1-9]</b> The patterns %1, %2, ... %9 are replaced by
the corresponding most significant component
of the input key's domain. If the input key
of the input key's domain. If the input key
is <i>user@mail.example.com</i>, then %1 is <b>com</b>, %2
is <b>example</b> and %3 is <b>mail</b>. If the input key
is <b>example</b> and %3 is <b>mail</b>. If the input key
is unqualified or does not have enough
domain components to satisfy all the speci-
fied patterns, the query is suppressed and
domain components to satisfy all the speci-
fied patterns, the query is suppressed and
returns no results.
The above %1, ... %9 expansions are avail-
The above %1, ... %9 expansions are avail-
able with Postfix 2.2 and later
The <b>domain</b> parameter described below limits the
input keys to addresses in matching domains. When
the <b>domain</b> parameter is non-empty, SQL queries for
unqualified addresses or addresses in non-matching
The <b>domain</b> parameter described below limits the
input keys to addresses in matching domains. When
the <b>domain</b> parameter is non-empty, SQL queries for
unqualified addresses or addresses in non-matching
domains are suppressed and return no results.
The precedence of this parameter has changed with
Postfix 2.2, in prior releases the precedence was,
from highest to lowest, <b>select_function</b>, <b>query</b>,
The precedence of this parameter has changed with
Postfix 2.2, in prior releases the precedence was,
from highest to lowest, <b>select_function</b>, <b>query</b>,
<b>select_field</b>, ...
With Postfix 2.2 the <b>query</b> parameter has highest
With Postfix 2.2 the <b>query</b> parameter has highest
precedence, see COMPATIBILITY above.
NOTE: DO NOT put quotes around the <b>query</b> parameter.
<b>result_format (default: %s</b>)
Format template applied to result attributes. Most
commonly used to append (or prepend) text to the
result. This parameter supports the following '%'
Format template applied to result attributes. Most
commonly used to append (or prepend) text to the
result. This parameter supports the following '%'
expansions:
<b>%%</b> This is replaced by a literal '%' character.
<b>%s</b> This is replaced by the value of the result
attribute. When result is empty it is
<b>%s</b> This is replaced by the value of the result
attribute. When result is empty it is
skipped.
<b>%u</b> When the result attribute value is an
<b>%u</b> When the result attribute value is an
address of the form user@domain, <b>%u</b> is
replaced by the local part of the address.
replaced by the local part of the address.
When the result has an empty localpart it is
skipped.
<b>%d</b> When a result attribute value is an address
of the form user@domain, <b>%d</b> is replaced by
<b>%d</b> When a result attribute value is an address
of the form user@domain, <b>%d</b> is replaced by
the domain part of the attribute value. When
the result is unqualified it is skipped.
<b>%[SUD1-9]</b>
The upper-case and decimal digit expansions
The upper-case and decimal digit expansions
interpolate the parts of the input key
rather than the result. Their behavior is
identical to that described with <b>query</b>, and
in fact because the input key is known in
advance, queries whose key does not contain
all the information specified in the result
template are suppressed and return no
rather than the result. Their behavior is
identical to that described with <b>query</b>, and
in fact because the input key is known in
advance, queries whose key does not contain
all the information specified in the result
template are suppressed and return no
results.
For example, using "result_format = <a href="smtp.8.html">smtp</a>:[%s]"
allows one to use a mailHost attribute as the basis
of a <a href="transport.5.html">transport(5)</a> table. After applying the result
format, multiple values are concatenated as comma
separated strings. The expansion_limit and parame-
of a <a href="transport.5.html">transport(5)</a> table. After applying the result
format, multiple values are concatenated as comma
separated strings. The expansion_limit and parame-
ter explained below allows one to restrict the num-
ber of values in the result, which is especially
ber of values in the result, which is especially
useful for maps that must return at most one value.
The default value <b>%s</b> specifies that each result
The default value <b>%s</b> specifies that each result
value should be used as is.
This parameter is available with Postfix 2.2 and
This parameter is available with Postfix 2.2 and
later.
NOTE: DO NOT put quotes around the result format!
<b>domain (default: no domain list)</b>
This is a list of domain names, paths to files, or
dictionaries. When specified, only fully qualified
search keys with a *non-empty* localpart and a
matching domain are eligible for lookup: 'user'
lookups, bare domain lookups and "@domain" lookups
are not performed. This can significantly reduce
This is a list of domain names, paths to files, or
dictionaries. When specified, only fully qualified
search keys with a *non-empty* localpart and a
matching domain are eligible for lookup: 'user'
lookups, bare domain lookups and "@domain" lookups
are not performed. This can significantly reduce
the query load on the PostgreSQL server.
domain = postfix.org, hash:/etc/postfix/search-
domains
domain = postfix.org, hash:/etc/postfix/searchdomains
It is best not to use SQL to store the domains eli-
gible for SQL lookups.

View File

@ -278,8 +278,8 @@ PIPE(8) PIPE(8)
<b>${sasl_sender</b>}
This macro expands to the SASL sender name
(i.e. the original submitter as per RFC
2554) used during the reception of the mes-
(i.e. the original submitter as per <a href="http://www.faqs.org/rfcs/rfc2554.html">RFC</a>
<a href="http://www.faqs.org/rfcs/rfc2554.html">2554</a>) used during the reception of the mes-
sage.
This is available in Postfix 2.2 and later.

View File

@ -45,157 +45,156 @@ POSTSUPER(1) POSTSUPER(1)
delete all mail with exactly one recipient
<b>user@example.com</b>:
mailq | tail +2 | grep -v '^ *(' | awk 'BEGIN { RS
= "" }
mailq | tail +2 | grep -v '^ *(' | awk 'BEGIN { RS = "" }
# $7=sender, $8=recipient1, $9=recipient2
{ if ($8 == "user@example.com" &amp;&amp; $9 == "")
print $1 }
' | tr -d '*!' | postsuper -d -
Specify "<b>-d ALL</b>" to remove all messages; for exam-
ple, specify "<b>-d ALL deferred</b>" to delete all mail
in the <b>deferred</b> queue. As a safety measure, the
Specify "<b>-d ALL</b>" to remove all messages; for exam-
ple, specify "<b>-d ALL deferred</b>" to delete all mail
in the <b>deferred</b> queue. As a safety measure, the
word <b>ALL</b> must be specified in upper case.
Warning: Postfix queue IDs are reused. There is a
very small possibility that postsuper deletes the
wrong message file when it is executed while the
Warning: Postfix queue IDs are reused. There is a
very small possibility that postsuper deletes the
wrong message file when it is executed while the
Postfix mail system is delivering mail.
The scenario is as follows:
1) The Postfix queue manager deletes the mes-
sage that <a href="postsuper.1.html"><b>postsuper</b>(1)</a> is asked to delete,
1) The Postfix queue manager deletes the mes-
sage that <a href="postsuper.1.html"><b>postsuper</b>(1)</a> is asked to delete,
because Postfix is finished with the message
(it is delivered, or it is returned to the
(it is delivered, or it is returned to the
sender).
2) New mail arrives, and the new message is
given the same queue ID as the message that
<a href="postsuper.1.html"><b>postsuper</b>(1)</a> is supposed to delete. The
probability for reusing a deleted queue ID
2) New mail arrives, and the new message is
given the same queue ID as the message that
<a href="postsuper.1.html"><b>postsuper</b>(1)</a> is supposed to delete. The
probability for reusing a deleted queue ID
is about 1 in 2**15 (the number of different
microsecond values that the system clock can
distinguish within a second).
3) <a href="postsuper.1.html"><b>postsuper</b>(1)</a> deletes the new message,
instead of the old message that it should
3) <a href="postsuper.1.html"><b>postsuper</b>(1)</a> deletes the new message,
instead of the old message that it should
have deleted.
<b>-h</b> <i>queue</i><b>_</b><i>id</i>
Put mail "on hold" so that no attempt is made to
deliver it. Move one message with the named queue
Put mail "on hold" so that no attempt is made to
deliver it. Move one message with the named queue
ID from the named mail queue(s) (default: <b>incoming</b>,
<b>active</b> and <b>deferred</b>) to the <b>hold</b> queue.
If a <i>queue</i><b>_</b><i>id</i> of <b>-</b> is specified, the program reads
If a <i>queue</i><b>_</b><i>id</i> of <b>-</b> is specified, the program reads
queue IDs from standard input.
Specify "<b>-h ALL</b>" to hold all messages; for example,
specify "<b>-h ALL deferred</b>" to hold all mail in the
<b>deferred</b> queue. As a safety measure, the word <b>ALL</b>
specify "<b>-h ALL deferred</b>" to hold all mail in the
<b>deferred</b> queue. As a safety measure, the word <b>ALL</b>
must be specified in upper case.
Note: while mail is "on hold" it will not expire
when its time in the queue exceeds the <b><a href="postconf.5.html#maximal_queue_lifetime">maxi</a>-</b>
Note: while mail is "on hold" it will not expire
when its time in the queue exceeds the <b><a href="postconf.5.html#maximal_queue_lifetime">maxi</a>-</b>
<b><a href="postconf.5.html#maximal_queue_lifetime">mal_queue_lifetime</a></b> or <b><a href="postconf.5.html#bounce_queue_lifetime">bounce_queue_lifetime</a></b> set-
ting. It becomes subject to expiration after it is
ting. It becomes subject to expiration after it is
released from "hold".
<b>-H</b> <i>queue</i><b>_</b><i>id</i>
Release mail that was put "on hold". Move one mes-
sage with the named queue ID from the named mail
sage with the named queue ID from the named mail
queue(s) (default: <b>hold</b>) to the <b>deferred</b> queue.
If a <i>queue</i><b>_</b><i>id</i> of <b>-</b> is specified, the program reads
If a <i>queue</i><b>_</b><i>id</i> of <b>-</b> is specified, the program reads
queue IDs from standard input.
Note: specify "<b>postsuper -r</b>" to release mail that
was kept on hold for a significant fraction of
<b>$<a href="postconf.5.html#maximal_queue_lifetime">maximal_queue_lifetime</a></b> or <b>$<a href="postconf.5.html#bounce_queue_lifetime">bounce_queue_lifetime</a></b>,
Note: specify "<b>postsuper -r</b>" to release mail that
was kept on hold for a significant fraction of
<b>$<a href="postconf.5.html#maximal_queue_lifetime">maximal_queue_lifetime</a></b> or <b>$<a href="postconf.5.html#bounce_queue_lifetime">bounce_queue_lifetime</a></b>,
or longer.
Specify "<b>-H ALL</b>" to release all mail that is "on
hold". As a safety measure, the word <b>ALL</b> must be
Specify "<b>-H ALL</b>" to release all mail that is "on
hold". As a safety measure, the word <b>ALL</b> must be
specified in upper case.
<b>-p</b> Purge old temporary files that are left over after
<b>-p</b> Purge old temporary files that are left over after
system or software crashes.
<b>-r</b> <i>queue</i><b>_</b><i>id</i>
Requeue the message with the named queue ID from
the named mail queue(s) (default: <b>hold</b>, <b>incoming</b>,
<b>active</b> and <b>deferred</b>). To requeue multiple mes-
Requeue the message with the named queue ID from
the named mail queue(s) (default: <b>hold</b>, <b>incoming</b>,
<b>active</b> and <b>deferred</b>). To requeue multiple mes-
sages, specify multiple <b>-r</b> command-line options.
Alternatively, if a <i>queue</i><b>_</b><i>id</i> of <b>-</b> is specified, the
program reads queue IDs from standard input.
Specify "<b>-r ALL</b>" to requeue all messages. As a
safety measure, the word <b>ALL</b> must be specified in
Specify "<b>-r ALL</b>" to requeue all messages. As a
safety measure, the word <b>ALL</b> must be specified in
upper case.
A requeued message is moved to the <b>maildrop</b> queue,
from where it is copied by the <a href="pickup.8.html"><b>pickup</b>(8)</a> and
<a href="cleanup.8.html"><b>cleanup</b>(8)</a> daemons to a new queue file. In many
respects its handling differs from that of a new
A requeued message is moved to the <b>maildrop</b> queue,
from where it is copied by the <a href="pickup.8.html"><b>pickup</b>(8)</a> and
<a href="cleanup.8.html"><b>cleanup</b>(8)</a> daemons to a new queue file. In many
respects its handling differs from that of a new
local submission.
<b>o</b> The message is not subjected to the
<b>o</b> The message is not subjected to the
<a href="postconf.5.html#smtpd_milters">smtpd_milters</a> or <a href="postconf.5.html#non_smtpd_milters">non_smtpd_milters</a> settings.
When mail has passed through an external
When mail has passed through an external
content filter, this would produce incorrect
results with Milter applications that depend
on original SMTP connection state informa-
on original SMTP connection state informa-
tion.
<b>o</b> The message is subjected again to mail
address rewriting and substitution. This is
useful when rewriting rules or virtual map-
useful when rewriting rules or virtual map-
pings have changed.
The address rewriting context (local or
remote) is the same as when the message was
remote) is the same as when the message was
received.
<b>o</b> The message is subjected to the same <a href="postconf.5.html#content_filter">con</a>-
<a href="postconf.5.html#content_filter">tent_filter</a> settings (if any) as used for
new local mail submissions. This is useful
<b>o</b> The message is subjected to the same <a href="postconf.5.html#content_filter">con</a>-
<a href="postconf.5.html#content_filter">tent_filter</a> settings (if any) as used for
new local mail submissions. This is useful
when <a href="postconf.5.html#content_filter">content_filter</a> settings have changed.
Warning: Postfix queue IDs are reused. There is a
very small possibility that <a href="postsuper.1.html"><b>postsuper</b>(1)</a> requeues
the wrong message file when it is executed while
the Postfix mail system is running, but no harm
Warning: Postfix queue IDs are reused. There is a
very small possibility that <a href="postsuper.1.html"><b>postsuper</b>(1)</a> requeues
the wrong message file when it is executed while
the Postfix mail system is running, but no harm
should be done.
<b>-s</b> Structure check and structure repair. This should
<b>-s</b> Structure check and structure repair. This should
be done once before Postfix startup.
<b>o</b> Rename files whose name does not match the
<b>o</b> Rename files whose name does not match the
message file inode number. This operation is
necessary after restoring a mail queue from
necessary after restoring a mail queue from
a different machine, or from backup media.
<b>o</b> Move queue files that are in the wrong place
in the file system hierarchy and remove sub-
directories that are no longer needed. File
position rearrangements are necessary after
position rearrangements are necessary after
a change in the <b><a href="postconf.5.html#hash_queue_names">hash_queue_names</a></b> and/or
<b><a href="postconf.5.html#hash_queue_depth">hash_queue_depth</a></b> configuration parameters.
<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>DIAGNOSTICS</b>
Problems are reported to the standard error stream and to
Problems are reported to the standard error stream and to
<b>syslogd</b>(8).
<a href="postsuper.1.html"><b>postsuper</b>(1)</a> reports the number of messages deleted with
<b>-d</b>, the number of messages requeued with <b>-r</b>, and the num-
ber of messages whose queue file name was fixed with <b>-s</b>.
The report is written to the standard error stream and to
<a href="postsuper.1.html"><b>postsuper</b>(1)</a> reports the number of messages deleted with
<b>-d</b>, the number of messages requeued with <b>-r</b>, and the num-
ber of messages whose queue file name was fixed with <b>-s</b>.
The report is written to the standard error stream and to
<b>syslogd</b>(8).
<b>ENVIRONMENT</b>
@ -203,37 +202,37 @@ POSTSUPER(1) POSTSUPER(1)
Directory with the <a href="postconf.5.html"><b>main.cf</b></a> file.
<b>BUGS</b>
Mail that is not sanitized by Postfix (i.e. mail in the
Mail that is not sanitized by Postfix (i.e. mail in the
<b>maildrop</b> queue) cannot be placed "on hold".
<b>CONFIGURATION PARAMETERS</b>
The following <a href="postconf.5.html"><b>main.cf</b></a> parameters are especially relevant
The following <a href="postconf.5.html"><b>main.cf</b></a> parameters are especially relevant
to this program. The text below provides only a parameter
summary. See <a href="postconf.5.html"><b>postconf</b>(5)</a> for more details including exam-
summary. See <a href="postconf.5.html"><b>postconf</b>(5)</a> for more details including exam-
ples.
<b><a href="postconf.5.html#config_directory">config_directory</a> (see 'postconf -d' output)</b>
The default location of the Postfix <a href="postconf.5.html">main.cf</a> and
The default location of the Postfix <a href="postconf.5.html">main.cf</a> and
<a href="master.5.html">master.cf</a> configuration files.
<b><a href="postconf.5.html#hash_queue_depth">hash_queue_depth</a> (1)</b>
The number of subdirectory levels for queue direc-
tories listed with the <a href="postconf.5.html#hash_queue_names">hash_queue_names</a> parameter.
The number of subdirectory levels for queue direc-
tories listed with the <a href="postconf.5.html#hash_queue_names">hash_queue_names</a> parameter.
<b><a href="postconf.5.html#hash_queue_names">hash_queue_names</a> (deferred, defer)</b>
The names of queue directories that are split
The names of queue directories that are split
across multiple subdirectory levels.
<b><a href="postconf.5.html#queue_directory">queue_directory</a> (see 'postconf -d' output)</b>
The location of the Postfix top-level queue direc-
The location of the Postfix top-level queue direc-
tory.
<b><a href="postconf.5.html#syslog_facility">syslog_facility</a> (mail)</b>
The syslog facility of Postfix logging.
<b><a href="postconf.5.html#syslog_name">syslog_name</a> (postfix)</b>
The mail system name that is prepended to the
process name in syslog records, so that "smtpd"
The mail system name that is prepended to the
process name in syslog records, so that "smtpd"
becomes, for example, "postfix/smtpd".
<b>SEE ALSO</b>
@ -241,7 +240,7 @@ POSTSUPER(1) POSTSUPER(1)
<a href="postqueue.1.html">postqueue(1)</a>, unprivileged queue operations
<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

@ -16,8 +16,8 @@ REGEXP_TABLE(5) REGEXP_TABLE(5)
<b>DESCRIPTION</b>
The Postfix mail system uses optional tables for address
rewriting or mail routing. These tables are usually in <b>dbm</b>
or <b>db</b> format.
rewriting, mail routing, or access control. These tables
are usually in <b>dbm</b> or <b>db</b> format.
Alternatively, lookup tables can be specified in POSIX
regular expression form. In this case, each input is com-

View File

@ -47,7 +47,9 @@ RELOCATED(5) RELOCATED(5)
The input format for the <a href="postmap.1.html"><b>postmap</b>(1)</a> command is as follows:
<b>o</b> An entry has one of the following form:
<i>pattern new</i><b>_</b><i>location</i>
Where <i>new</i><b>_</b><i>location</i> specifies contact information
such as an email address, or perhaps a street
address or telephone number.

View File

@ -19,8 +19,10 @@ TRANSPORT(5) TRANSPORT(5)
<b>DESCRIPTION</b>
The optional <a href="transport.5.html"><b>transport</b>(5)</a> table specifies a mapping from
email addresses to message delivery transports and next-
hop hosts. The table is searched by the <a href="trivial-rewrite.8.html"><b>trivial-rewrite</b>(8)</a>
daemon.
hop destinations. Message delivery transports such as
<b>local</b> or <b>smtp</b> are defined in the <a href="master.5.html"><b>master.cf</b></a> file, and next-
hop destinations are typically hosts or domain names. The
table is searched by the <a href="trivial-rewrite.8.html"><b>trivial-rewrite</b>(8)</a> daemon.
This mapping overrides the default <i>transport</i>:<i>nexthop</i>
selection that is built into Postfix:
@ -172,7 +174,7 @@ TRANSPORT(5) TRANSPORT(5)
<b>my.domain :</b>
<b>.my.domain :</b>
<b>* <a href="smtp.8.html">smtp</a>:outbound-relay.my.domain</b>
<b>* <a href="smtp.8.html">smtp</a>:outbound-relay.my.domain</b>
In order to send mail for <b>example.com</b> and its subdomains
via the <b>uucp</b> transport to the UUCP host named <b>example</b>:
@ -213,30 +215,30 @@ TRANSPORT(5) TRANSPORT(5)
The error mailer can be used to bounce mail:
<b>.example.com <a href="error.8.html">error</a>:mail for *.example.com is not</b>
<b>deliverable</b>
<b>.example.com <a href="error.8.html">error</a>:mail for *.example.com is not deliverable</b>
This causes all mail for <i>user</i>@<i>anything</i><b>.example.com</b> to be
This causes all mail for <i>user</i>@<i>anything</i><b>.example.com</b> to be
bounced.
<b>REGULAR EXPRESSION TABLES</b>
This section describes how the table lookups change when
This section describes how the table lookups change when
the table is given in the form of regular expressions. For
a description of regular expression lookup table syntax,
a description of regular expression lookup table syntax,
see <a href="regexp_table.5.html"><b>regexp_table</b>(5)</a> or <a href="pcre_table.5.html"><b>pcre_table</b>(5)</a>.
Each pattern is a regular expression that is applied to
the entire address being looked up. Thus,
<i>some.domain.hierarchy</i> is not looked up via its parent
domains, nor is <i>user+foo@domain</i> looked up as <i>user@domain</i>.
Each pattern is a regular expression that is applied to
the entire address being looked up. Thus,
<i>some.domain.hierarchy</i> is not looked up via its parent
domains, nor is <i>user+foo@domain</i> looked up as <i>user@domain</i>.
Patterns are applied in the order as specified in the ta-
ble, until a pattern is found that matches the search
Patterns are applied in the order as specified in the ta-
ble, until a pattern is found that matches the search
string.
Results are the same as with indexed file lookups, with
the additional feature that parenthesized substrings from
the pattern can be interpolated as <b>$1</b>, <b>$2</b> and so on.
The <a href="trivial-rewrite.8.html"><b>trivial-rewrite</b>(8)</a> server disallows regular expression
substitution of $1 etc. in regular expression lookup
tables, because that could open a security hole (Postfix
version 2.3 and later).
<b>TCP-BASED TABLES</b>
This section describes how the table lookups change when

View File

@ -113,8 +113,10 @@ VIRTUAL(5) VIRTUAL(5)
Postfix SMTP server accepts mail for any recipient
in <i>domain</i>, regardless of whether that recipient
exists. This may turn your mail system into a
backscatter source that returns undeliverable spam
to innocent people.
backscatter source: Postfix first accepts mail for
non-existent recipients and then tries to return
that mail as "undeliverable" to the often forged
sender address.
<b>RESULT ADDRESS REWRITING</b>
The lookup result is subject to address rewriting:
@ -162,15 +164,15 @@ VIRTUAL(5) VIRTUAL(5)
/etc/postfix/<a href="postconf.5.html">main.cf</a>:
<a href="postconf.5.html#virtual_alias_maps">virtual_alias_maps</a> = hash:/etc/postfix/virtual
Note: some systems use <b>dbm</b> databases instead of <b>hash</b>.
See the output from "<b>postconf -m</b>" for available data-
base types.
Note: some systems use <b>dbm</b> databases instead of <b>hash</b>. See
the output from "<b>postconf -m</b>" for available database
types.
/etc/postfix/<a href="virtual.8.html">virtual</a>:
<i>virtual-alias.domain anything</i> (right-hand content does not matter)
<i>postmaster@virtual-alias.domain postmaster</i>
<i>user1@virtual-alias.domain address1</i>
<i>user2@virtual-alias.domain address2, address3</i>
<i>virtual-alias.domain anything</i> (right-hand content does not matter)
<i>postmaster@virtual-alias.domain postmaster</i>
<i>user1@virtual-alias.domain address1</i>
<i>user2@virtual-alias.domain address2, address3</i>
The <i>virtual-alias.domain anything</i> entry is required for a
<a href="ADDRESS_CLASS_README.html#virtual_alias_class">virtual alias domain</a>. <b>Without this entry, mail is rejected</b>

View File

@ -19,8 +19,9 @@ The \fBpostmap\fR(1) command creates or queries one or more Postfix
lookup tables, or updates an existing one. The input and output
file formats are expected to be compatible with:
.ti +4
\fBmakemap \fIfile_type\fR \fIfile_name\fR < \fIfile_name\fR
.nf
\fBmakemap \fIfile_type\fR \fIfile_name\fR < \fIfile_name\fR
.fi
If the result files do not exist they will be created with the
same group and other read permissions as their source file.
@ -38,8 +39,9 @@ The format of a lookup table input file is as follows:
.IP \(bu
A table entry has the form
.sp
.ti +5
\fIkey\fR whitespace \fIvalue\fR
.nf
\fIkey\fR whitespace \fIvalue\fR
.fi
.IP \(bu
Empty lines and whitespace-only lines are ignored, as
are lines whose first non-whitespace character is a `#'.

View File

@ -42,15 +42,13 @@ If a \fIqueue_id\fR of \fB-\fR is specified, the program reads
queue IDs from standard input. For example, to delete all mail
with exactly one recipient \fBuser@example.com\fR:
.sp
.nf
mailq | tail +2 | grep -v '^ *(' | awk \'BEGIN { RS = "" }
.ti +4
# $7=sender, $8=recipient1, $9=recipient2
.ti +4
{ if ($8 == "user@example.com" && $9 == "")
.ti +10
print $1 }
.br
# $7=sender, $8=recipient1, $9=recipient2
{ if ($8 == "user@example.com" && $9 == "")
print $1 }
\' | tr -d '*!' | postsuper -d -
.fi
.sp
Specify "\fB-d ALL\fR" to remove all messages; for example, specify
"\fB-d ALL deferred\fR" to delete all mail in the \fBdeferred\fR queue.

View File

@ -365,20 +365,17 @@ tables, some systems use \fBdbm\fR. Use the command
"\fBpostconf -m\fR" to find out what lookup tables Postfix
supports on your system.
.na
.nf
.na
/etc/postfix/main.cf:
.in +4
smtpd_client_restrictions =
.in +4
check_client_access hash:/etc/postfix/access
smtpd_client_restrictions =
check_client_access hash:/etc/postfix/access
.in -8
/etc/postfix/access:
.in +4
1.2.3 REJECT
1.2.3.4 OK
.in -4
1.2.3 REJECT
1.2.3.4 OK
.fi
.ad
Execute the command "\fBpostmap /etc/postfix/access\fR" after
editing the file.

View File

@ -37,8 +37,9 @@ The format of the alias database input file is as follows:
.IP \(bu
An alias definition has the form
.sp
.ti +5
\fIname\fR: \fIvalue1\fR, \fIvalue2\fR, \fI...\fR
.nf
\fIname\fR: \fIvalue1\fR, \fIvalue2\fR, \fI...\fR
.fi
.IP \(bu
Empty lines and whitespace-only lines are ignored, as
are lines whose first non-whitespace character is a `#'.

View File

@ -40,8 +40,9 @@ edit the temporary file.
To preview the results of $\fIname\fR expansions in the
template text, use the command
.ti +4
\fBpostconf -b\fR \fItemporary_file\fR
.nf
\fBpostconf -b\fR \fItemporary_file\fR
.fi
Errors in the template will be reported to the standard
error stream and to the syslog daemon.
@ -54,9 +55,10 @@ Once the result is satisfactory, copy the template to the
Postfix configuration directory and specify in main.cf
something like:
.nf
/etc/postfix/main.cf:
.ti +4
bounce_template_file = /etc/postfix/bounce.cf
.fi
.SH "TEMPLATE FILE FORMAT"
.na
.nf
@ -76,32 +78,27 @@ only. You can change the word EOF, but you can't enclose
it in quotes as with the shell or with Perl (\fItemplate_name\fB
= <<'EOF'\fR). Here is an example:
.in +4
.nf
.na
# The failure template is used for undeliverable mail.
# The failure template is used for undeliverable mail.
failure_template = <<EOF
Charset: us-ascii
From: MAILER-DAEMON (Mail Delivery System)
Subject: Undelivered Mail Returned to Sender
Postmaster-Subject: Postmaster Copy: Undelivered Mail
failure_template = <<EOF
Charset: us-ascii
From: MAILER-DAEMON (Mail Delivery System)
Subject: Undelivered Mail Returned to Sender
Postmaster-Subject: Postmaster Copy: Undelivered Mail
This is the mail system at host $myhostname.
This is the mail system at host $myhostname.
I'm sorry to have to inform you that your message could not
be delivered to one or more recipients. It's attached below.
I'm sorry to have to inform you that your message could not
be delivered to one or more recipients. It's attached below.
For further assistance, please send mail to postmaster.
For further assistance, please send mail to postmaster.
If you do so, please include this problem report. You can
delete your own text from the attached returned message.
If you do so, please include this problem report. You can
delete your own text from the attached returned message.
.ti +12
The mail system
EOF
.in -4
.ad
The mail system
EOF
.fi
.PP
The usage and specification of bounce templates is

View File

@ -113,8 +113,9 @@ Note: @\fIdomain\fR is a wild-card. When this form is applied
to recipient addresses, the Postfix SMTP server accepts
mail for any recipient in \fIdomain\fR, regardless of whether
that recipient exists. This may turn your mail system into
a backscatter source that returns undeliverable spam to
innocent people.
a backscatter source: Postfix first accepts mail for
non-existent recipients and then tries to return that mail
as "undeliverable" to the often forged sender address.
.SH "RESULT ADDRESS REWRITING"
.na
.nf

View File

@ -70,17 +70,16 @@ pattern is found that matches the search string.
.SH "EXAMPLE SMTPD ACCESS MAP"
.na
.nf
.nf
/etc/postfix/main.cf:
.ti +4
smtpd_client_restrictions = ... cidr:/etc/postfix/client.cidr ...
smtpd_client_restrictions = ... cidr:/etc/postfix/client.cidr ...
/etc/postfix/client.cidr:
.in +4
# Rule order matters. Put more specific whitelist entries
# before more general blacklist entries.
192.168.1.1 OK
192.168.0.0/16 REJECT
.in -4
# Rule order matters. Put more specific whitelist entries
# before more general blacklist entries.
192.168.1.1 OK
192.168.0.0/16 REJECT
.fi
.SH "SEE ALSO"
.na
.nf

View File

@ -174,16 +174,12 @@ that the ISP supports "+" style address extensions).
.na
.nf
/etc/postfix/main.cf:
.in +4
smtp_generic_maps = hash:/etc/postfix/generic
.in -4
/etc/postfix/generic:
.in +4
his@localdomain.local hisaccount@hisisp.example
her@localdomain.local heraccount@herisp.example
@localdomain.local hisaccount+local@hisisp.example
.in -4
.ad
.fi

View File

@ -8,17 +8,15 @@ Postfix built-in content inspection
.SH "SYNOPSIS"
.na
.nf
.nf
\fBheader_checks = pcre:/etc/postfix/header_checks\fR
.br
\fBmime_header_checks = pcre:/etc/postfix/mime_header_checks\fR
.br
\fBnested_header_checks = pcre:/etc/postfix/nested_header_checks\fR
.br
\fBbody_checks = pcre:/etc/postfix/body_checks\fR
.sp
\fBpostmap -q "\fIstring\fB" pcre:/etc/postfix/\fIfilename\fR
.br
\fBpostmap -q - pcre:/etc/postfix/\fIfilename\fR <\fIinputfile\fR
.fi
.SH DESCRIPTION
.ad
.fi
@ -66,6 +64,15 @@ message headers is treated as body content.
Note: message headers are examined one logical header at a time,
even when a message header spans multiple lines. Body lines are
always examined one line at a time.
.SH "COMPATIBILITY"
.na
.nf
.ad
.fi
With Postfix version 2.2 and earlier specify "\fBpostmap
-fq\fR" to query a table that contains case sensitive
patterns. By default, regexp: and pcre: patterns are case
insensitive.
.SH "TABLE FORMAT"
.na
.nf
@ -273,7 +280,7 @@ line at a time. A decision made for one line is not carried over
to the next line.
.IP \(bu
If text in the message body is encoded
(RFC 2045) then the rules have to specified for the encoded
(RFC 2045) then the rules need to be specified for the encoded
form.
.IP \(bu
Likewise, when message headers are encoded (RFC
@ -330,14 +337,11 @@ Header pattern to block attachments with bad file name extensions.
.na
.nf
/etc/postfix/main.cf:
.ti +4
header_checks = regexp:/etc/postfix/header_checks
header_checks = regexp:/etc/postfix/header_checks
/etc/postfix/header_checks:
.ti +4
/^content-(type|disposition):.*name[[:space:]]*=.*\\.(exe|vbs)/
.ti +8
REJECT Bad attachment file name extension: $2
/^content-(type|disposition):.*name[[:space:]]*=.*\\.(exe|vbs)/
REJECT Bad attachment file name extension: $2
.ad
.fi
@ -346,14 +350,11 @@ Body pattern to stop a specific HTML browser vulnerability exploit.
.na
.nf
/etc/postfix/main.cf:
.ti +4
body_checks = regexp:/etc/postfix/body_checks
body_checks = regexp:/etc/postfix/body_checks
/etc/postfix/body_checks:
.ti +4
/^<iframe src=(3D)?cid:.* height=(3D)?0 width=(3D)?0>$/
.ti +8
REJECT IFRAME vulnerability exploit
/^<iframe src=(3D)?cid:.* height=(3D)?0 width=(3D)?0>$/
REJECT IFRAME vulnerability exploit
.SH "SEE ALSO"
.na
.nf

View File

@ -23,8 +23,9 @@ Alternatively, lookup tables can be specified as LDAP databases.
In order to use LDAP lookups, define an LDAP source as a lookup
table in main.cf, for example:
.ti +4
alias_maps = ldap:/etc/postfix/ldap-aliases.cf
.nf
alias_maps = ldap:/etc/postfix/ldap-aliases.cf
.fi
The file /etc/postfix/ldap-aliases.cf has the same format as
the Postfix main.cf file, and can specify the parameters
@ -89,19 +90,17 @@ return the key itself.
For example, NEVER do this in a map defining $mydestination:
.in +4
query_filter = domain=*
.br
result_attribute = domain
.in -4
.nf
query_filter = domain=*
result_attribute = domain
.fi
Do this instead:
.in +4
query_filter = domain=%s
.br
result_attribute = domain
.in -4
.nf
query_filter = domain=%s
result_attribute = domain
.fi
.SH "GENERAL LDAP PARAMETERS"
.na
.nf
@ -114,8 +113,9 @@ strings.
.IP "\fBserver_host (default: localhost)\fR"
The name of the host running the LDAP server, e.g.
.ti +4
server_host = ldap.example.com
.nf
server_host = ldap.example.com
.fi
Depending on the LDAP client library you're using, it should
be possible to specify multiple servers here, with the library
@ -123,41 +123,45 @@ trying them in order should the first one fail. It should also
be possible to give each server in the list a different port
(overriding \fBserver_port\fR below), by naming them like
.ti +4
server_host = ldap.example.com:1444
.nf
server_host = ldap.example.com:1444
.fi
With OpenLDAP, a (list of) LDAP URLs can be used to specify both
the hostname(s) and the port(s):
.ti +4
server_host = ldap://ldap.example.com:1444
.ti +8
ldap://ldap2.example.com:1444
.nf
server_host = ldap://ldap.example.com:1444
ldap://ldap2.example.com:1444
.fi
All LDAP URLs accepted by the OpenLDAP library are supported,
including connections over UNIX domain sockets, and LDAP SSL
(the last one provided that OpenLDAP was compiled with support
for SSL):
.ti +4
server_host = ldapi://%2Fsome%2Fpath
.ti +8
ldaps://ldap.example.com:636
.nf
server_host = ldapi://%2Fsome%2Fpath
ldaps://ldap.example.com:636
.fi
.IP "\fBserver_port (default: 389)\fR"
The port the LDAP server listens on, e.g.
.ti +4
server_port = 778
.nf
server_port = 778
.fi
.IP "\fBtimeout (default: 10 seconds)\fR"
The number of seconds a search can take before timing out, e.g.
.ti +4
timeout = 5
.fi
timeout = 5
.fi
.IP "\fBsearch_base (No default; you must configure this)\fR"
The RFC2253 base DN at which to conduct the search, e.g.
.ti +4
search_base = dc=your, dc=com
.nf
search_base = dc=your, dc=com
.fi
.IP
With Postfix 2.2 and later this parameter supports the
following '%' expansions:
@ -199,8 +203,9 @@ The RFC2254 filter used to search the directory, where \fB%s\fR
is a substitute for the address Postfix is trying to resolve,
e.g.
.ti +4
query_filter = (&(mail=%s)(paid_up=true))
.nf
query_filter = (&(mail=%s)(paid_up=true))
.fi
This parameter supports the following '%' expansions:
.RS
@ -309,8 +314,9 @@ are eligible for lookup: 'user' lookups, bare domain lookups
and "@domain" lookups are not performed. This can significantly
reduce the query load on the LDAP server.
.ti +4
domain = postfix.org, hash:/etc/postfix/searchdomains
.nf
domain = postfix.org, hash:/etc/postfix/searchdomains
.fi
It is best not to use LDAP to store the domains eligible
for LDAP lookups.
@ -323,15 +329,17 @@ The attribute(s) Postfix will read from any directory
entries returned by the lookup, to be resolved to an email
address.
.ti +4
result_attribute = mailbox, maildrop
.nf
result_attribute = mailbox, maildrop
.fi
.IP "\fBspecial_result_attribute (default: empty)\fR"
The attribute(s) of directory entries that can contain DNs
or URLs. If found, a recursive subsequent search is done
using their values.
.ti +4
special_result_attribute = memberdn
.nf
special_result_attribute = memberdn
.fi
DN recursion retrieves the same result_attributes as the
main query, including the special attributes for further
@ -349,8 +357,9 @@ attribute on selected groups to route the group to a specific host,
where the group is expanded, possibly via mailing-list manager or
other special processing.
.ti +4
terminal_result_attribute = maildrop
.nf
terminal_result_attribute = maildrop
.fi
This feature is available with Postfix 2.4 or later.
.IP "\fBleaf_result_attribute (default: empty)\fR"
@ -370,15 +379,12 @@ rfc822 addresses, then the string attributes go in "result_attribute".
The attributes that represent the email addresses of objects
referenced via a DN (or LDAP URI) go in "leaf_result_attribute".
.in +4
result_attribute = memberaddr
.br
special_result_attribute = memberdn
.br
terminal_result_attribute = maildrop
.br
leaf_result_attribute = mail
.in -4
.nf
result_attribute = memberaddr
special_result_attribute = memberdn
terminal_result_attribute = maildrop
leaf_result_attribute = mail
.fi
This feature is available with Postfix 2.4 or later.
.IP "\fBscope (default: sub)\fR"
@ -390,8 +396,9 @@ Whether or not to bind to the LDAP server. Newer LDAP
implementations don't require clients to bind, which saves
time. Example:
.ti +4
bind = no
.nf
bind = no
.fi
If you do need to bind, you might consider configuring
Postfix to connect to the local machine on a port that's
@ -403,8 +410,9 @@ the clear.
.IP "\fBbind_dn (default: empty)\fR"
If you do have to bind, do it with this distinguished name. Example:
.ti +4
bind_dn = uid=postfix, dc=your, dc=com
.nf
bind_dn = uid=postfix, dc=your, dc=com
.fi
.IP "\fBbind_pw (default: empty)\fR"
The password for the distinguished name above. If you have
to use this, you probably want to make the map configuration
@ -415,8 +423,9 @@ password. This is because main.cf needs to be world readable
to allow local accounts to submit mail via the sendmail
command. Example:
.ti +4
bind_pw = postfixpw
.nf
bind_pw = postfixpw
.fi
.IP "\fBcache (IGNORED with a warning)\fR"
.IP "\fBcache_expiry (IGNORED with a warning)\fR"
.IP "\fBcache_size (IGNORED with a warning)\fR"
@ -485,19 +494,22 @@ issue the STARTTLS command.
LDAP SSL service can be requested by using a LDAP SSL URL
in the server_host parameter:
.ti +4
server_host = ldaps://ldap.example.com:636
.nf
server_host = ldaps://ldap.example.com:636
.fi
STARTTLS can be turned on with the start_tls parameter:
.ti +4
start_tls = yes
.nf
start_tls = yes
.fi
Both forms require LDAP protocol version 3, which has to be set
explicitly with:
.ti +4
version = 3
.nf
version = 3
.fi
If any of the Postfix programs querying the map is configured in
master.cf to run chrooted, all the certificates and keys involved
@ -550,18 +562,17 @@ Here's a basic example for using LDAP to look up local(8)
aliases.
Assume that in main.cf, you have:
.ti +4
alias_maps = hash:/etc/aliases,
.ti +8
ldap:/etc/postfix/ldap-aliases.cf
.nf
alias_maps = hash:/etc/aliases,
ldap:/etc/postfix/ldap-aliases.cf
.fi
and in ldap:/etc/postfix/ldap-aliases.cf you have:
.in +4
server_host = ldap.example.com
.br
search_base = dc=example, dc=com
.in -4
.nf
server_host = ldap.example.com
search_base = dc=example, dc=com
.fi
Upon receiving mail for a local address "ldapuser" that
isn't found in the /etc/aliases database, Postfix will

View File

@ -21,8 +21,9 @@ rewriting or mail routing. These tables are usually in
Alternatively, lookup tables can be specified as MySQL databases.
In order to use MySQL lookups, define a MySQL source as a lookup
table in main.cf, for example:
.ti +4
alias_maps = mysql:/etc/mysql-aliases.cf
.nf
alias_maps = mysql:/etc/mysql-aliases.cf
.fi
The file /etc/postfix/mysql-aliases.cf has the same format as
the Postfix main.cf file, and can specify the parameters
@ -56,14 +57,12 @@ query constructed from the \fBselect_field\fR, \fBtable\fR,
The old interface will be gradually phased out. To migrate to
the new interface set:
.ti +4
\fBquery\fR = SELECT [\fIselect_field\fR]
.ti +8
FROM [\fItable\fR]
.ti +8
WHERE [\fIwhere_field\fR] = '%s'
.ti +12
[\fIadditional_conditions\fR]
.nf
\fBquery\fR = SELECT [\fIselect_field\fR]
FROM [\fItable\fR]
WHERE [\fIwhere_field\fR] = '%s'
[\fIadditional_conditions\fR]
.fi
Insert the value, not the name, of each legacy parameter. Note
that the \fBadditional_conditions\fR parameter is optional
@ -97,10 +96,10 @@ return the key itself or a constant value.
The hosts that Postfix will try to connect to and query from.
Specify \fIunix:\fR for UNIX domain sockets, \fIinet:\fR for TCP
connections (default). Example:
.ti +4
hosts = host1.some.domain host2.some.domain
.ti +4
hosts = unix:/file/name
.nf
hosts = host1.some.domain host2.some.domain
hosts = unix:/file/name
.fi
The hosts are tried in random order, with all connections over
UNIX domain sockets being tried before those over TCP. The
@ -112,26 +111,28 @@ NOTE: if you specify localhost as a hostname (even if you
prefix it with \fIinet:\fR), MySQL will connect to the default
UNIX domain socket. In order to instruct MySQL to connect to
localhost over TCP you have to specify
.ti +4
hosts = 127.0.0.1
.nf
hosts = 127.0.0.1
.fi
.IP "\fBuser, password\fR"
The user name and password to log into the mysql server.
Example:
.in +4
user = someone
.br
password = some_password
.in -4
.nf
user = someone
password = some_password
.fi
.IP "\fBdbname\fR"
The database name on the servers. Example:
.ti +4
dbname = customer_database
.nf
dbname = customer_database
.fi
.IP "\fBquery\fR"
The SQL query template used to search the database, where \fB%s\fR
is a substitute for the address Postfix is trying to resolve,
e.g.
.ti +4
query = SELECT replacement FROM aliases WHERE mailbox = '%s'
.nf
query = SELECT replacement FROM aliases WHERE mailbox = '%s'
.fi
This parameter supports the following '%' expansions:
.RS
@ -178,14 +179,12 @@ the SQL query was built from the separate parameters:
\fBadditional_conditions\fR. The mapping from the old parameters
to the equivalent query is:
.ti +4
SELECT [\fBselect_field\fR]
.ti +4
FROM [\fBtable\fR]
.ti +4
WHERE [\fBwhere_field\fR] = '%s'
.ti +10
[\fBadditional_conditions\fR]
.nf
SELECT [\fBselect_field\fR]
FROM [\fBtable\fR]
WHERE [\fBwhere_field\fR] = '%s'
[\fBadditional_conditions\fR]
.fi
The '%s' in the \fBWHERE\fR clause expands to the escaped search string.
With Postfix 2.2 these legacy parameters are used if the \fBquery\fR
@ -241,8 +240,9 @@ keys with a *non-empty* localpart and a matching domain
are eligible for lookup: 'user' lookups, bare domain lookups
and "@domain" lookups are not performed. This can significantly
reduce the query load on the MySQL server.
.ti +4
domain = postfix.org, hash:/etc/postfix/searchdomains
.nf
domain = postfix.org, hash:/etc/postfix/searchdomains
.fi
It is best not to use SQL to store the domains eligible
for SQL lookups.
@ -262,14 +262,12 @@ values.
The following parameters can be used to fill in a
SELECT template statement of the form:
.ti +4
SELECT [\fBselect_field\fR]
.ti +4
FROM [\fBtable\fR]
.ti +4
WHERE [\fBwhere_field\fR] = '%s'
.ti +10
[\fBadditional_conditions\fR]
.nf
SELECT [\fBselect_field\fR]
FROM [\fBtable\fR]
WHERE [\fBwhere_field\fR] = '%s'
[\fBadditional_conditions\fR]
.fi
The specifier %s is replaced by the search string, and is
escaped so if it contains single quotes or other odd characters,
@ -282,20 +280,24 @@ are ignored. Please migrate to the new interface as the legacy
interface may be removed in a future release.
.IP "\fBselect_field\fR"
The SQL "select" parameter. Example:
.ti +4
\fBselect_field\fR = forw_addr
.nf
\fBselect_field\fR = forw_addr
.fi
.IP "\fBtable\fR"
The SQL "select .. from" table name. Example:
.ti +4
\fBtable\fR = mxaliases
.nf
\fBtable\fR = mxaliases
.fi
.IP "\fBwhere_field\fR
The SQL "select .. where" parameter. Example:
.ti +4
\fBwhere_field\fR = alias
.nf
\fBwhere_field\fR = alias
.fi
.IP "\fBadditional_conditions\fR
Additional conditions to the SQL query. Example:
.ti +4
\fBadditional_conditions\fR = AND status = 'paid'
.nf
\fBadditional_conditions\fR = AND status = 'paid'
.fi
.SH "SEE ALSO"
.na
.nf

View File

@ -32,8 +32,9 @@ command as described in the SYNOPSIS above.
Most of the NIS+ query is specified via the NIS+ map name. The
general format of a Postfix NIS+ map name is as follows:
.ti +4
\fBnisplus:[\fIname\fB=%s];\fIname.name.name\fB.:\fIcolumn\fR
.fi
\fBnisplus:[\fIname\fB=%s];\fIname.name.name\fB.:\fIcolumn\fR
.fi
Postfix NIS+ map names differ from what one normally
would use with commands such as \fBniscat\fR:
@ -54,13 +55,13 @@ no ":\fIcolumn\fR" is specified the first column (1) is used.
.SH "EXAMPLE"
.na
.nf
.ad
.fi
A NIS+ aliases map might be queried as follows:
.ti +4
alias_maps = dbm:/etc/mail/aliases,
.ti +2
.nf
alias_maps = dbm:/etc/mail/aliases,
nisplus:[alias=%s];mail_aliases.org_dir.$mydomain.:1
.ad
.fi
This queries the local aliases file before the NIS+ file.

View File

@ -15,8 +15,8 @@ format of Postfix PCRE tables
.ad
.fi
The Postfix mail system uses optional tables for address
rewriting or mail routing. These tables are usually in
\fBdbm\fR or \fBdb\fR format.
rewriting, mail routing, or access control. These tables
are usually in \fBdbm\fR or \fBdb\fR format.
Alternatively, lookup tables can be specified in Perl Compatible
Regular Expression form. In this case, each input is compared

View File

@ -21,8 +21,9 @@ rewriting or mail routing. These tables are usually in
Alternatively, lookup tables can be specified as PostgreSQL
databases. In order to use PostgreSQL lookups, define a
PostgreSQL source as a lookup table in main.cf, for example:
.ti +4
alias_maps = pgsql:/etc/pgsql-aliases.cf
.nf
alias_maps = pgsql:/etc/pgsql-aliases.cf
.fi
The file /etc/postfix/pgsql-aliases.cf has the same format as
the Postfix main.cf file, and can specify the parameters
@ -60,19 +61,18 @@ phased out, \fBselect_function\fR, \fBselect_field\fR, \fBtable\fR,
\fBwhere_field\fR and \fBadditional_conditions\fR parameters. To
migrate to the new interface set:
.ti +4
\fBquery\fR = SELECT \fIselect_function\fR('%s')
.nf
\fBquery\fR = SELECT \fIselect_function\fR('%s')
.fi
or in the absence of \fBselection_function\fR, the lower precedence:
.ti +4
\fBquery\fR = SELECT \fIselect_field\fR
.ti +8
FROM \fItable\fR
.ti +8
WHERE \fIwhere_field\fR = '%s'
.ti +12
\fIadditional_conditions\fR
.nf
\fBquery\fR = SELECT \fIselect_field\fR
FROM \fItable\fR
WHERE \fIwhere_field\fR = '%s'
\fIadditional_conditions\fR
.fi
Use the value, not the name, of each legacy parameter. Note
that the \fBadditional_conditions\fR parameter is optional
@ -106,10 +106,10 @@ return the key itself or a constant value.
The hosts that Postfix will try to connect to and query from.
Specify \fIunix:\fR for UNIX-domain sockets, \fIinet:\fR for TCP
connections (default). Example:
.ti +4
hosts = host1.some.domain host2.some.domain
.ti +4
hosts = unix:/file/name
.nf
hosts = host1.some.domain host2.some.domain
hosts = unix:/file/name
.fi
The hosts are tried in random order, with all connections over
UNIX domain sockets being tried before those over TCP. The
@ -124,21 +124,22 @@ connection otherwise.
.IP "\fBuser, password\fR"
The user name and password to log into the pgsql server.
Example:
.in +4
user = someone
.br
password = some_password
.in -4
.nf
user = someone
password = some_password
.fi
.IP "\fBdbname\fR"
The database name on the servers. Example:
.ti +4
dbname = customer_database
.nf
dbname = customer_database
.fi
.IP "\fBquery\fR"
The SQL query template used to search the database, where \fB%s\fR
is a substitute for the address Postfix is trying to resolve,
e.g.
.ti +4
query = SELECT replacement FROM aliases WHERE mailbox = '%s'
.nf
query = SELECT replacement FROM aliases WHERE mailbox = '%s'
.fi
This parameter supports the following '%' expansions:
.RS
@ -242,8 +243,9 @@ keys with a *non-empty* localpart and a matching domain
are eligible for lookup: 'user' lookups, bare domain lookups
and "@domain" lookups are not performed. This can significantly
reduce the query load on the PostgreSQL server.
.ti +4
domain = postfix.org, hash:/etc/postfix/searchdomains
.nf
domain = postfix.org, hash:/etc/postfix/searchdomains
.fi
It is best not to use SQL to store the domains eligible
for SQL lookups.
@ -263,12 +265,14 @@ values.
Pre-Postfix 2.2 legacy interfaces:
.IP "\fBselect_function\fR"
This parameter specifies a database function name. Example:
.ti +4
select_function = my_lookup_user_alias
.nf
select_function = my_lookup_user_alias
.fi
This is equivalent to:
.ti +4
query = SELECT my_lookup_user_alias('%s')
.nf
query = SELECT my_lookup_user_alias('%s')
.fi
This parameter overrides the legacy table-related fields (described
below). With Postfix versions prior to 2.2, it also overrides the
@ -281,14 +285,12 @@ The following parameters (with lower precedence than the
\fBselect_function\fR interface described above) can be used to
build the SQL select statement as follows:
.ti +4
SELECT [\fBselect_field\fR]
.ti +4
FROM [\fBtable\fR]
.ti +4
WHERE [\fBwhere_field\fR] = '%s'
.ti +10
[\fBadditional_conditions\fR]
.nf
SELECT [\fBselect_field\fR]
FROM [\fBtable\fR]
WHERE [\fBwhere_field\fR] = '%s'
[\fBadditional_conditions\fR]
.fi
The specifier %s is replaced with each lookup by the lookup key
and is escaped so if it contains single quotes or other odd
@ -302,20 +304,24 @@ are defined, these parameters are ignored. Please migrate to the new
\fBquery\fR interface as this interface is slated to be phased out.
.IP "\fBselect_field\fR"
The SQL "select" parameter. Example:
.ti +4
\fBselect_field\fR = forw_addr
.nf
\fBselect_field\fR = forw_addr
.fi
.IP "\fBtable\fR"
The SQL "select .. from" table name. Example:
.ti +4
\fBtable\fR = mxaliases
.nf
\fBtable\fR = mxaliases
.fi
.IP "\fBwhere_field\fR
The SQL "select .. where" parameter. Example:
.ti +4
\fBwhere_field\fR = alias
.nf
\fBwhere_field\fR = alias
.fi
.IP "\fBadditional_conditions\fR
Additional conditions to the SQL query. Example:
.ti +4
\fBadditional_conditions\fR = AND status = 'paid'
.nf
\fBadditional_conditions\fR = AND status = 'paid'
.fi
.SH "SEE ALSO"
.na
.nf

View File

@ -15,8 +15,8 @@ format of Postfix regular expression tables
.ad
.fi
The Postfix mail system uses optional tables for address
rewriting or mail routing. These tables are usually in
\fBdbm\fR or \fBdb\fR format.
rewriting, mail routing, or access control. These tables
are usually in \fBdbm\fR or \fBdb\fR format.
Alternatively, lookup tables can be specified in POSIX regular
expression form. In this case, each input is compared against a

View File

@ -49,9 +49,11 @@ lookup fields can match both upper and lower case.
The input format for the \fBpostmap\fR(1) command is as follows:
.IP \(bu
An entry has one of the following form:
.ti +5
\fIpattern new_location\fR
.br
.nf
\fIpattern new_location\fR
.fi
Where \fInew_location\fR specifies contact information such as
an email address, or perhaps a street address or telephone number.
.IP \(bu

View File

@ -17,7 +17,10 @@ Postfix transport table format
.ad
.fi
The optional \fBtransport\fR(5) table specifies a mapping from email
addresses to message delivery transports and next-hop hosts. The
addresses to message delivery transports and next-hop destinations.
Message delivery transports such as \fBlocal\fR or \fBsmtp\fR
are defined in the \fBmaster.cf\fR file, and next-hop
destinations are typically hosts or domain names. The
table is searched by the \fBtrivial-rewrite\fR(8) daemon.
This mapping overrides the default \fItransport\fR:\fInexthop\fR
@ -165,20 +168,19 @@ internal destinations (do not change the delivery transport or
the nexthop information) and specify a wildcard for all other
destinations.
.ti +5
\fB\&my.domain :\fR
.ti +5
\fB\&.my.domain :\fR
.ti +5
\fB* smtp:outbound-relay.my.domain\fR
.nf
\fB\&my.domain :\fR
\fB\&.my.domain :\fR
\fB* smtp:outbound-relay.my.domain\fR
.fi
In order to send mail for \fBexample.com\fR and its subdomains
via the \fBuucp\fR transport to the UUCP host named \fBexample\fR:
.ti +5
\fBexample.com uucp:example\fR
.ti +5
\fB\&.example.com uucp:example\fR
.nf
\fBexample.com uucp:example\fR
\fB\&.example.com uucp:example\fR
.fi
When no nexthop host name is specified, the destination domain
name is used instead. For example, the following directs mail for
@ -186,18 +188,19 @@ name is used instead. For example, the following directs mail for
exchanger for \fBexample.com\fR. The \fBslow\fR transport could be
configured to run at most one delivery process at a time:
.ti +5
\fBexample.com slow:\fR
.nf
\fBexample.com slow:\fR
.fi
When no transport is specified, Postfix uses the transport that
matches the address domain class (see DESCRIPTION
above). The following sends all mail for \fBexample.com\fR and its
subdomains to host \fBgateway.example.com\fR:
.ti +5
\fBexample.com :[gateway.example.com]\fR
.ti +5
\fB\&.example.com :[gateway.example.com]\fR
.nf
\fBexample.com :[gateway.example.com]\fR
\fB\&.example.com :[gateway.example.com]\fR
.fi
In the above example, the [] suppress MX lookups.
This prevents mail routing loops when your machine is primary MX
@ -206,8 +209,9 @@ host for \fBexample.com\fR.
In the case of delivery via SMTP, one may specify
\fIhostname\fR:\fIservice\fR instead of just a host:
.ti +5
\fBexample.com smtp:bar.example:2025\fR
.nf
\fBexample.com smtp:bar.example:2025\fR
.fi
This directs mail for \fIuser\fR@\fBexample.com\fR to host \fBbar.example\fR
port \fB2025\fR. Instead of a numerical port a symbolic name may be
@ -215,8 +219,9 @@ used. Specify [] around the hostname if MX lookups must be disabled.
The error mailer can be used to bounce mail:
.ti +5
\fB\&.example.com error:mail for *.example.com is not deliverable\fR
.nf
\fB\&.example.com error:mail for *.example.com is not deliverable\fR
.fi
This causes all mail for \fIuser\fR@\fIanything\fB.example.com\fR
to be bounced.
@ -238,9 +243,10 @@ nor is \fIuser+foo@domain\fR looked up as \fIuser@domain\fR.
Patterns are applied in the order as specified in the table, until a
pattern is found that matches the search string.
Results are the same as with indexed file lookups, with
the additional feature that parenthesized substrings from the
pattern can be interpolated as \fB$1\fR, \fB$2\fR and so on.
The \fBtrivial-rewrite\fR(8) server disallows regular
expression substitution of $1 etc. in regular expression
lookup tables, because that could open a security hole
(Postfix version 2.3 and later).
.SH "TCP-BASED TABLES"
.na
.nf

View File

@ -108,8 +108,9 @@ Note: @\fIdomain\fR is a wild-card. With this form, the
Postfix SMTP server accepts
mail for any recipient in \fIdomain\fR, regardless of whether
that recipient exists. This may turn your mail system into
a backscatter source that returns undeliverable spam to
innocent people.
a backscatter source: Postfix first accepts mail for
non-existent recipients and then tries to return that mail
as "undeliverable" to the often forged sender address.
.SH "RESULT ADDRESS REWRITING"
.na
.nf
@ -162,24 +163,20 @@ visible in a virtual alias domain. In particular, local
Support for a virtual alias domain looks like:
.nf
/etc/postfix/main.cf:
.in +4
virtual_alias_maps = hash:/etc/postfix/virtual
virtual_alias_maps = hash:/etc/postfix/virtual
.fi
Note: some systems use \fBdbm\fR databases instead of \fBhash\fR.
See the output from "\fBpostconf -m\fR" for available database types.
.ti -4
/etc/postfix/virtual:
.nf
.na
\fIvirtual-alias.domain anything\fR (right-hand content does not matter)
\fIpostmaster@virtual-alias.domain postmaster\fR
\fIuser1@virtual-alias.domain address1\fR
\fIuser2@virtual-alias.domain address2, address3\fR
.fi
.in -4
.ad
/etc/postfix/virtual:
\fIvirtual-alias.domain anything\fR (right-hand content does not matter)
\fIpostmaster@virtual-alias.domain postmaster\fR
\fIuser1@virtual-alias.domain address1\fR
\fIuser2@virtual-alias.domain address2, address3\fR
.fi
.sp
The \fIvirtual-alias.domain anything\fR entry is required for a

View File

@ -31,39 +31,36 @@ not care.
.fi
To register a new connection send the following request to
the \fBanvil\fR(8) server:
.PP
.in +4
\fBrequest=connect\fR
.br
\fBident=\fIstring\fR
.in
.PP
.nf
\fBrequest=connect\fR
\fBident=\fIstring\fR
.fi
The \fBanvil\fR(8) server answers with the number of
simultaneous connections and the number of connections per
unit time for the (service, client) combination specified
with \fBident\fR:
.PP
.in +4
\fBstatus=0\fR
.br
\fBcount=\fInumber\fR
.br
\fBrate=\fInumber\fR
.in
.PP
.nf
\fBstatus=0\fR
\fBcount=\fInumber\fR
\fBrate=\fInumber\fR
.fi
To register a disconnect event send the following request
to the \fBanvil\fR(8) server:
.PP
.in +4
\fBrequest=disconnect\fR
.br
\fBident=\fIstring\fR
.in
.PP
.nf
\fBrequest=disconnect\fR
\fBident=\fIstring\fR
.fi
The \fBanvil\fR(8) server replies with:
.PP
.ti +4
\fBstatus=0\fR
.nf
\fBstatus=0\fR
.fi
.SH "MESSAGE RATE CONTROL"
.na
.nf
@ -71,22 +68,20 @@ The \fBanvil\fR(8) server replies with:
.fi
To register a message delivery request send the following
request to the \fBanvil\fR(8) server:
.PP
.in +4
\fBrequest=message\fR
.br
\fBident=\fIstring\fR
.in
.PP
.nf
\fBrequest=message\fR
\fBident=\fIstring\fR
.fi
The \fBanvil\fR(8) server answers with the number of message
delivery requests per unit time for the (service, client)
combination specified with \fBident\fR:
.PP
.in +4
\fBstatus=0\fR
.br
\fBrate=\fInumber\fR
.in
.nf
\fBstatus=0\fR
\fBrate=\fInumber\fR
.fi
.SH "RECIPIENT RATE CONTROL"
.na
.nf
@ -94,22 +89,20 @@ combination specified with \fBident\fR:
.fi
To register a recipient request send the following request
to the \fBanvil\fR(8) server:
.PP
.in +4
\fBrequest=recipient\fR
.br
\fBident=\fIstring\fR
.in
.PP
.nf
\fBrequest=recipient\fR
\fBident=\fIstring\fR
.fi
The \fBanvil\fR(8) server answers with the number of recipient
addresses per unit time for the (service, client) combination
specified with \fBident\fR:
.PP
.in +4
\fBstatus=0\fR
.br
\fBrate=\fInumber\fR
.in
.nf
\fBstatus=0\fR
\fBrate=\fInumber\fR
.fi
.SH "TLS SESSION NEGOTIATION RATE CONTROL"
.na
.nf
@ -120,41 +113,37 @@ Postfix 2.3 and later.
To register a request for a new (i.e. not cached) TLS session
send the following request to the \fBanvil\fR(8) server:
.PP
.in +4
\fBrequest=newtls\fR
.br
\fBident=\fIstring\fR
.in
.PP
.nf
\fBrequest=newtls\fR
\fBident=\fIstring\fR
.fi
The \fBanvil\fR(8) server answers with the number of new
TLS session requests per unit time for the (service, client)
combination specified with \fBident\fR:
.PP
.in +4
\fBstatus=0\fR
.br
\fBrate=\fInumber\fR
.in
.PP
.nf
\fBstatus=0\fR
\fBrate=\fInumber\fR
.fi
To retrieve new TLS session request rate information without
updating the counter information, send:
.PP
.in +4
\fBrequest=newtls_report\fR
.br
\fBident=\fIstring\fR
.in
.PP
.nf
\fBrequest=newtls_report\fR
\fBident=\fIstring\fR
.fi
The \fBanvil\fR(8) server answers with the number of new
TLS session requests per unit time for the (service, client)
combination specified with \fBident\fR:
.PP
.in +4
\fBstatus=0\fR
.br
\fBrate=\fInumber\fR
.in
.nf
\fBstatus=0\fR
\fBrate=\fInumber\fR
.fi
.SH "SECURITY"
.na
.nf

View File

@ -37,9 +37,10 @@ or fax machines.
To prevent Postfix from sending multiple recipients per delivery
request, specify
.ti +4
\fItransport\fB_destination_recipient_limit = 1\fR
.sp
.nf
\fItransport\fB_destination_recipient_limit = 1\fR
.fi
in the Postfix \fBmain.cf\fR file, where \fItransport\fR
is the name in the first column of the Postfix \fBmaster.cf\fR
@ -145,17 +146,19 @@ Postfix. The empty sender address is not affected by the
Caution: a null sender address is easily mis-parsed by
naive software. For example, when the \fBpipe\fR(8) daemon
executes a command such as:
.ti +4
command -f$sender -- $recipient (\fIbad\fR)
.sp
.nf
command -f$sender -- $recipient (\fIbad\fR)
.fi
.IP
the command will mis-parse the -f option value when the
sender address is a null string. For correct parsing,
specify \fB$sender\fR as an argument by itself:
.ti +4
command -f $sender -- $recipient (\fIgood\fR)
.sp
.nf
command -f $sender -- $recipient (\fIgood\fR)
.fi
.IP
This feature is available with Postfix 2.3 and later.
.IP "\fBsize\fR=\fIsize_limit\fR (optional)"
Messages greater in size than this limit (in bytes) will

View File

@ -22,18 +22,20 @@ reject mail for non-existent local addresses, but it is not
practical to maintain a copy of the passwd file in the chroot
jail. The solution:
.sp
.nf
local_recipient_maps =
.ti +4
proxy:unix:passwd.byname $alias_maps
proxy:unix:passwd.byname $alias_maps
.fi
.IP \(bu
To consolidate the number of open lookup tables by sharing
one open table among multiple processes. For example, making
mysql connections from every Postfix daemon process results
in "too many connections" errors. The solution:
.sp
.nf
virtual_alias_maps =
.ti +4
proxy:mysql:/etc/postfix/virtual_alias.cf
proxy:mysql:/etc/postfix/virtual_alias.cf
.fi
.sp
The total number of connections is limited by the number of
proxymap server processes.

View File

@ -34,8 +34,9 @@ address as described under TABLE SEARCH ORDER below.
The mailbox pathname is constructed as follows:
.ti +2
\fB$virtual_mailbox_base/$virtual_mailbox_maps(\fIrecipient\fB)\fR
.nf
\fB$virtual_mailbox_base/$virtual_mailbox_maps(\fIrecipient\fB)\fR
.fi
where \fIrecipient\fR is the full recipient address.
.SH "UNIX MAILBOX FORMAT"

View File

@ -3,5 +3,5 @@
for file
do
echo ==== $file ====
deroff $file | spell
done | fgrep -vf proto/stop
deroff $file | spell | fgrep -vf proto/stop
done

View File

@ -21,7 +21,10 @@ Backscatter Howto</h1>
<h2>Overview </h2>
This document describes features that require Postfix version 2.0
or later.
or later. The examples use Perl Compatible Regular Expressions
(Postfix pcre: tables), but also provide a translation to POSIX
regular expressions (Postfix regexp: tables). PCRE is preferred
primarily because the implementation is often faster.</p>
<p> Topics covered in this document: </p>
@ -174,8 +177,8 @@ patterns like this: </p>
<blockquote>
<pre>
/etc/postfix/main.cf:
header_checks = regexp:/etc/postfix/header_checks
body_checks = regexp:/etc/postfix/body_checks
header_checks = pcre:/etc/postfix/header_checks
body_checks = pcre:/etc/postfix/body_checks
/etc/postfix/header_checks:
if /^Received:/
@ -183,7 +186,7 @@ patterns like this: </p>
reject forged client name in Received: header: $1
/^Received: +from +[^ ]+ +\(([^ ]+ +[he]+lo=|[he]+lo +)(porcupine\.org)\)/
reject forged client name in Received: header: $2
/^Received:.* +by +(porcupine\.org)[[:&gt;:]]/
/^Received:.* +by +(porcupine\.org)\b/
reject forged mail server name in Received: header: $1
endif
/^Message-ID:.* &lt;!&amp;!/ DUNNO
@ -196,7 +199,7 @@ patterns like this: </p>
reject forged client name in Received: header: $1
/^[&gt; ]*Received: +from +[^ ]+ +\(([^ ]+ +[he]+lo=|[he]+lo +)(porcupine\.org)\)/
reject forged client name in Received: header: $2
/^[&gt; ]*Received:.* +by +(porcupine\.org)[[:&gt;:]]/
/^[&gt; ]*Received:.* +by +(porcupine\.org)\b/
reject forged mail server name in Received: header: $1
endif
/^[&gt; ]*Message-ID:.* &lt;!&amp;!/ DUNNO
@ -209,6 +212,9 @@ patterns like this: </p>
<ul>
<li> <p> The example uses pcre: tables mainly for speed; with minor
modifications, you can use regexp: tables as explained below. </p>
<li> <p> The example is simplified for educational purposes. In
reality my patterns list multiple domain names, as
"<tt>(domain|domain|...)</tt>". </p>
@ -220,9 +226,10 @@ the "<tt>\</tt>", the "<tt>.</tt>" would match any character. </p>
and "<tt>)</tt>" literally. Without the "<tt>\</tt>", the "<tt>(</tt>"
and "<tt>)</tt>" would be grouping operators. </p>
<li> <p> The "<tt>[[:&gt;:]]</tt>" matches the end of a word. On
some systems you should specify "<tt>\&gt;</tt>" instead. For details
see your system documentation. </p>
<li> <p> The "<tt>\b</tt>" is used here to match the end of a word.
If you use regexp: tables, specify "<tt>[[:&gt;:]]</tt>" (on some
systems you should specify "<tt>\&gt;</tt>" instead; for details
see your system documentation).
<li> <p> The "if /pattern/" and "endif" eliminate unnecessary
matching attempts. DO NOT indent lines starting with /pattern/
@ -311,15 +318,15 @@ and is very easy to stop.
<blockquote>
<pre>
/etc/postfix/main.cf:
header_checks = regexp:/etc/postfix/header_checks
body_checks = regexp:/etc/postfix/body_checks
header_checks = pcre:/etc/postfix/header_checks
body_checks = pcre:/etc/postfix/body_checks
/etc/postfix/header_checks:
/^(From|Return-Path):.*[[:&lt;:]](user@domain\.tld)[[:&gt;:]]/
/^(From|Return-Path):.*\b(user@domain\.tld)\b/
reject forged sender address in $1: header: $2
/etc/postfix/body_checks:
/^[&gt; ]*(From|Return-Path):.*[[:&lt;:]](user@domain\.tld)[[:&gt;:]]/
/^[&gt; ]*(From|Return-Path):.*\b(user@domain\.tld)\b/
reject forged sender address in $1: header: $2
</pre>
</blockquote>
@ -328,14 +335,18 @@ and is very easy to stop.
<ul>
<li> <p> The example uses pcre: tables mainly for speed; with minor
modifications, you can use regexp: tables as explained below. </p>
<li> <p> The example is simplified for educational purposes. In
reality, my patterns list multiple email addresses as
"<tt>(user1@domain1\.tld|user2@domain2\.tld)</tt>". </p>
<li> <p> The "<tt>[[:&lt;:]]</tt>" and "<tt>[[:&gt;:]]</tt>" match
the beginning and end of a word, respectively. On some systems you
should specify "<tt>\&lt;</tt>" and "<tt>\&gt;</tt>" instead. For
details see your system documentation. </p>
<li> <p> The two "<tt>\b</tt>" as used in "<tt>\b(user@domain\.tld)\b</tt>"
match the beginning and end of a word, respectively. If you use
regexp: tables, specify "<tt>[[:&lt;:]]</tt> and <tt>[[:&gt;:]]</tt>"
(on some systems you should specify "<tt>\&lt;</tt> and <tt>\&gt;</tt>"
instead; for details see your system documentation). </p>
<li> <p> The "<tt>\.</tt>" matches "<tt>.</tt>" literally. Without
the "<tt>\</tt>", the "<tt>.</tt>" would match any character. </p>

View File

@ -149,6 +149,7 @@ Linux Debian 1.3.1, 2.x, 3.x <br>
Linux RedHat 3.x (January 2004) - 9.x <br>
Linux Slackware 3.x, 4.x, 7.x <br>
Linux SuSE 5.x, 6.x, 7.x <br>
Linux Ubuntu 4.10..7.04<br>
Mac OS X <br>
NEXTSTEP 3.x <br>
NetBSD 1.x <br>

View File

@ -708,9 +708,6 @@ text below: </p>
<li> <p> This was tested with sid-milter-0.2.10 and sid-milter-0.2.14. </p>
<li> <p> This fixes only the ugly message header, but not the WARNING
message. Fortunately, sid-milter logs that message only once. </p>
</ul>
<p> To fix the ugly message header with other Milter applications,

View File

@ -460,12 +460,13 @@ bgcolor="#f0f0ff"> <br> smtpd(8)<br><br> </td> <td> <tt> &lt;-&gt;
</table>
<li> <p> The bounce(8), defer(8) and trace(8) servers each maintain
their own queue directory trees with per-message logfiles. This
information is used to send delivery or non-delivery notifications
to the sender. </p>
<li> <p> The bounce(8), defer(8) and trace(8) services each maintain
their own queue directory trees with per-message logfiles. Postfix
uses this information when sending "failed", "delayed" or "success"
delivery status notifications to the sender. </p>
<p> The trace(8) service implements support for the Postfix "sendmail
<p> The trace(8) service also implements support for the Postfix
"sendmail
-bv" and "sendmail -v" commands which produce reports about how
Postfix delivers mail, and is available with Postfix version 2.1
and later. See <a href="DEBUG_README.html#trace_mail"> DEBUG_README

View File

@ -362,20 +362,17 @@
# "\fBpostconf -m\fR" to find out what lookup tables Postfix
# supports on your system.
#
# .na
# .nf
# .na
# /etc/postfix/main.cf:
# .in +4
# smtpd_client_restrictions =
# .in +4
# check_client_access hash:/etc/postfix/access
# smtpd_client_restrictions =
# check_client_access hash:/etc/postfix/access
#
# .in -8
# /etc/postfix/access:
# .in +4
# 1.2.3 REJECT
# 1.2.3.4 OK
# .in -4
# 1.2.3 REJECT
# 1.2.3.4 OK
# .fi
# .ad
#
# Execute the command "\fBpostmap /etc/postfix/access\fR" after
# editing the file.

View File

@ -31,8 +31,9 @@
# .IP \(bu
# An alias definition has the form
# .sp
# .ti +5
# \fIname\fR: \fIvalue1\fR, \fIvalue2\fR, \fI...\fR
# .nf
# \fIname\fR: \fIvalue1\fR, \fIvalue2\fR, \fI...\fR
# .fi
# .IP \(bu
# Empty lines and whitespace-only lines are ignored, as
# are lines whose first non-whitespace character is a `#'.

View File

@ -32,8 +32,9 @@
# To preview the results of $\fIname\fR expansions in the
# template text, use the command
#
# .ti +4
# \fBpostconf -b\fR \fItemporary_file\fR
# .nf
# \fBpostconf -b\fR \fItemporary_file\fR
# .fi
#
# Errors in the template will be reported to the standard
# error stream and to the syslog daemon.
@ -46,9 +47,10 @@
# Postfix configuration directory and specify in main.cf
# something like:
#
# .nf
# /etc/postfix/main.cf:
# .ti +4
# bounce_template_file = /etc/postfix/bounce.cf
# .fi
# TEMPLATE FILE FORMAT
# .ad
# .fi
@ -66,32 +68,27 @@
# it in quotes as with the shell or with Perl (\fItemplate_name\fB
# = <<'EOF'\fR). Here is an example:
#
# .in +4
# .nf
# .na
# # The failure template is used for undeliverable mail.
# # The failure template is used for undeliverable mail.
#
# failure_template = <<EOF
# Charset: us-ascii
# From: MAILER-DAEMON (Mail Delivery System)
# Subject: Undelivered Mail Returned to Sender
# Postmaster-Subject: Postmaster Copy: Undelivered Mail
#
# This is the mail system at host $myhostname.
#
# I'm sorry to have to inform you that your message could not
# be delivered to one or more recipients. It's attached below.
#
# For further assistance, please send mail to postmaster.
#
# If you do so, please include this problem report. You can
# delete your own text from the attached returned message.
# failure_template = <<EOF
# Charset: us-ascii
# From: MAILER-DAEMON (Mail Delivery System)
# Subject: Undelivered Mail Returned to Sender
# Postmaster-Subject: Postmaster Copy: Undelivered Mail
#
# This is the mail system at host $myhostname.
#
# I'm sorry to have to inform you that your message could not
# be delivered to one or more recipients. It's attached below.
#
# For further assistance, please send mail to postmaster.
#
# If you do so, please include this problem report. You can
# delete your own text from the attached returned message.
#
# .ti +12
# The mail system
# EOF
# .in -4
# .ad
# The mail system
# EOF
# .fi
# .PP
# The usage and specification of bounce templates is

View File

@ -101,8 +101,9 @@
# to recipient addresses, the Postfix SMTP server accepts
# mail for any recipient in \fIdomain\fR, regardless of whether
# that recipient exists. This may turn your mail system into
# a backscatter source that returns undeliverable spam to
# innocent people.
# a backscatter source: Postfix first accepts mail for
# non-existent recipients and then tries to return that mail
# as "undeliverable" to the often forged sender address.
# RESULT ADDRESS REWRITING
# .ad
# .fi

View File

@ -58,17 +58,16 @@
# Patterns are applied in the order as specified in the table, until a
# pattern is found that matches the search string.
# EXAMPLE SMTPD ACCESS MAP
# .nf
# /etc/postfix/main.cf:
# .ti +4
# smtpd_client_restrictions = ... cidr:/etc/postfix/client.cidr ...
# smtpd_client_restrictions = ... cidr:/etc/postfix/client.cidr ...
#
# /etc/postfix/client.cidr:
# .in +4
# # Rule order matters. Put more specific whitelist entries
# # before more general blacklist entries.
# 192.168.1.1 OK
# 192.168.0.0/16 REJECT
# .in -4
# # Rule order matters. Put more specific whitelist entries
# # before more general blacklist entries.
# 192.168.1.1 OK
# 192.168.0.0/16 REJECT
# .fi
# SEE ALSO
# postmap(1), Postfix lookup table manager
# regexp_table(5), format of regular expression tables

View File

@ -152,16 +152,12 @@
# .na
# .nf
# /etc/postfix/main.cf:
# .in +4
# smtp_generic_maps = hash:/etc/postfix/generic
# .in -4
#
# /etc/postfix/generic:
# .in +4
# his@localdomain.local hisaccount@hisisp.example
# her@localdomain.local heraccount@herisp.example
# @localdomain.local hisaccount+local@hisisp.example
# .in -4
#
# .ad
# .fi

View File

@ -4,17 +4,15 @@
# SUMMARY
# Postfix built-in content inspection
# SYNOPSIS
# .nf
# \fBheader_checks = pcre:/etc/postfix/header_checks\fR
# .br
# \fBmime_header_checks = pcre:/etc/postfix/mime_header_checks\fR
# .br
# \fBnested_header_checks = pcre:/etc/postfix/nested_header_checks\fR
# .br
# \fBbody_checks = pcre:/etc/postfix/body_checks\fR
# .sp
# \fBpostmap -q "\fIstring\fB" pcre:/etc/postfix/\fIfilename\fR
# .br
# \fBpostmap -q - pcre:/etc/postfix/\fIfilename\fR <\fIinputfile\fR
# .fi
# DESCRIPTION
# This document describes access control on the content of
# message headers and message body lines; it is implemented
@ -60,6 +58,13 @@
# Note: message headers are examined one logical header at a time,
# even when a message header spans multiple lines. Body lines are
# always examined one line at a time.
# COMPATIBILITY
# .ad
# .fi
# With Postfix version 2.2 and earlier specify "\fBpostmap
# -fq\fR" to query a table that contains case sensitive
# patterns. By default, regexp: and pcre: patterns are case
# insensitive.
# TABLE FORMAT
# .ad
# .fi
@ -284,7 +289,7 @@
# to the next line.
# .IP \(bu
# If text in the message body is encoded
# (RFC 2045) then the rules have to specified for the encoded
# (RFC 2045) then the rules need to be specified for the encoded
# form.
# .IP \(bu
# Likewise, when message headers are encoded (RFC
@ -337,14 +342,11 @@
# .na
# .nf
# /etc/postfix/main.cf:
# .ti +4
# header_checks = regexp:/etc/postfix/header_checks
# header_checks = regexp:/etc/postfix/header_checks
#
# /etc/postfix/header_checks:
# .ti +4
# /^content-(type|disposition):.*name[[:space:]]*=.*\\.(exe|vbs)/
# .ti +8
# REJECT Bad attachment file name extension: $2
# /^content-(type|disposition):.*name[[:space:]]*=.*\\.(exe|vbs)/
# REJECT Bad attachment file name extension: $2
#
# .ad
# .fi
@ -353,14 +355,11 @@
# .na
# .nf
# /etc/postfix/main.cf:
# .ti +4
# body_checks = regexp:/etc/postfix/body_checks
# body_checks = regexp:/etc/postfix/body_checks
#
# /etc/postfix/body_checks:
# .ti +4
# /^<iframe src=(3D)?cid:.* height=(3D)?0 width=(3D)?0>$/
# .ti +8
# REJECT IFRAME vulnerability exploit
# /^<iframe src=(3D)?cid:.* height=(3D)?0 width=(3D)?0>$/
# REJECT IFRAME vulnerability exploit
# SEE ALSO
# cleanup(8), canonicalize and enqueue Postfix message
# pcre_table(5), format of PCRE lookup tables

View File

@ -17,8 +17,9 @@
# In order to use LDAP lookups, define an LDAP source as a lookup
# table in main.cf, for example:
#
# .ti +4
# alias_maps = ldap:/etc/postfix/ldap-aliases.cf
# .nf
# alias_maps = ldap:/etc/postfix/ldap-aliases.cf
# .fi
#
# The file /etc/postfix/ldap-aliases.cf has the same format as
# the Postfix main.cf file, and can specify the parameters
@ -79,19 +80,17 @@
#
# For example, NEVER do this in a map defining $mydestination:
#
# .in +4
# query_filter = domain=*
# .br
# result_attribute = domain
# .in -4
# .nf
# query_filter = domain=*
# result_attribute = domain
# .fi
#
# Do this instead:
#
# .in +4
# query_filter = domain=%s
# .br
# result_attribute = domain
# .in -4
# .nf
# query_filter = domain=%s
# result_attribute = domain
# .fi
# GENERAL LDAP PARAMETERS
# .ad
# .fi
@ -102,8 +101,9 @@
# .IP "\fBserver_host (default: localhost)\fR"
# The name of the host running the LDAP server, e.g.
#
# .ti +4
# server_host = ldap.example.com
# .nf
# server_host = ldap.example.com
# .fi
#
# Depending on the LDAP client library you're using, it should
# be possible to specify multiple servers here, with the library
@ -111,41 +111,45 @@
# be possible to give each server in the list a different port
# (overriding \fBserver_port\fR below), by naming them like
#
# .ti +4
# server_host = ldap.example.com:1444
# .nf
# server_host = ldap.example.com:1444
# .fi
#
# With OpenLDAP, a (list of) LDAP URLs can be used to specify both
# the hostname(s) and the port(s):
#
# .ti +4
# server_host = ldap://ldap.example.com:1444
# .ti +8
# ldap://ldap2.example.com:1444
# .nf
# server_host = ldap://ldap.example.com:1444
# ldap://ldap2.example.com:1444
# .fi
#
# All LDAP URLs accepted by the OpenLDAP library are supported,
# including connections over UNIX domain sockets, and LDAP SSL
# (the last one provided that OpenLDAP was compiled with support
# for SSL):
#
# .ti +4
# server_host = ldapi://%2Fsome%2Fpath
# .ti +8
# ldaps://ldap.example.com:636
# .nf
# server_host = ldapi://%2Fsome%2Fpath
# ldaps://ldap.example.com:636
# .fi
# .IP "\fBserver_port (default: 389)\fR"
# The port the LDAP server listens on, e.g.
#
# .ti +4
# server_port = 778
# .nf
# server_port = 778
# .fi
# .IP "\fBtimeout (default: 10 seconds)\fR"
# The number of seconds a search can take before timing out, e.g.
#
# .ti +4
# timeout = 5
# .fi
# timeout = 5
# .fi
# .IP "\fBsearch_base (No default; you must configure this)\fR"
# The RFC2253 base DN at which to conduct the search, e.g.
#
# .ti +4
# search_base = dc=your, dc=com
# .nf
# search_base = dc=your, dc=com
# .fi
# .IP
# With Postfix 2.2 and later this parameter supports the
# following '%' expansions:
@ -187,8 +191,9 @@
# is a substitute for the address Postfix is trying to resolve,
# e.g.
#
# .ti +4
# query_filter = (&(mail=%s)(paid_up=true))
# .nf
# query_filter = (&(mail=%s)(paid_up=true))
# .fi
#
# This parameter supports the following '%' expansions:
# .RS
@ -297,8 +302,9 @@
# and "@domain" lookups are not performed. This can significantly
# reduce the query load on the LDAP server.
#
# .ti +4
# domain = postfix.org, hash:/etc/postfix/searchdomains
# .nf
# domain = postfix.org, hash:/etc/postfix/searchdomains
# .fi
#
# It is best not to use LDAP to store the domains eligible
# for LDAP lookups.
@ -311,15 +317,17 @@
# entries returned by the lookup, to be resolved to an email
# address.
#
# .ti +4
# result_attribute = mailbox, maildrop
# .nf
# result_attribute = mailbox, maildrop
# .fi
# .IP "\fBspecial_result_attribute (default: empty)\fR"
# The attribute(s) of directory entries that can contain DNs
# or URLs. If found, a recursive subsequent search is done
# using their values.
#
# .ti +4
# special_result_attribute = memberdn
# .nf
# special_result_attribute = memberdn
# .fi
#
# DN recursion retrieves the same result_attributes as the
# main query, including the special attributes for further
@ -337,8 +345,9 @@
# where the group is expanded, possibly via mailing-list manager or
# other special processing.
#
# .ti +4
# terminal_result_attribute = maildrop
# .nf
# terminal_result_attribute = maildrop
# .fi
#
# This feature is available with Postfix 2.4 or later.
# .IP "\fBleaf_result_attribute (default: empty)\fR"
@ -358,15 +367,12 @@
# The attributes that represent the email addresses of objects
# referenced via a DN (or LDAP URI) go in "leaf_result_attribute".
#
# .in +4
# result_attribute = memberaddr
# .br
# special_result_attribute = memberdn
# .br
# terminal_result_attribute = maildrop
# .br
# leaf_result_attribute = mail
# .in -4
# .nf
# result_attribute = memberaddr
# special_result_attribute = memberdn
# terminal_result_attribute = maildrop
# leaf_result_attribute = mail
# .fi
#
# This feature is available with Postfix 2.4 or later.
# .IP "\fBscope (default: sub)\fR"
@ -378,8 +384,9 @@
# implementations don't require clients to bind, which saves
# time. Example:
#
# .ti +4
# bind = no
# .nf
# bind = no
# .fi
#
# If you do need to bind, you might consider configuring
# Postfix to connect to the local machine on a port that's
@ -391,8 +398,9 @@
# .IP "\fBbind_dn (default: empty)\fR"
# If you do have to bind, do it with this distinguished name. Example:
#
# .ti +4
# bind_dn = uid=postfix, dc=your, dc=com
# .nf
# bind_dn = uid=postfix, dc=your, dc=com
# .fi
# .IP "\fBbind_pw (default: empty)\fR"
# The password for the distinguished name above. If you have
# to use this, you probably want to make the map configuration
@ -403,8 +411,9 @@
# to allow local accounts to submit mail via the sendmail
# command. Example:
#
# .ti +4
# bind_pw = postfixpw
# .nf
# bind_pw = postfixpw
# .fi
# .IP "\fBcache (IGNORED with a warning)\fR"
# .IP "\fBcache_expiry (IGNORED with a warning)\fR"
# .IP "\fBcache_size (IGNORED with a warning)\fR"
@ -471,19 +480,22 @@
# LDAP SSL service can be requested by using a LDAP SSL URL
# in the server_host parameter:
#
# .ti +4
# server_host = ldaps://ldap.example.com:636
# .nf
# server_host = ldaps://ldap.example.com:636
# .fi
#
# STARTTLS can be turned on with the start_tls parameter:
#
# .ti +4
# start_tls = yes
# .nf
# start_tls = yes
# .fi
#
# Both forms require LDAP protocol version 3, which has to be set
# explicitly with:
#
# .ti +4
# version = 3
# .nf
# version = 3
# .fi
#
# If any of the Postfix programs querying the map is configured in
# master.cf to run chrooted, all the certificates and keys involved
@ -534,18 +546,17 @@
# aliases.
# Assume that in main.cf, you have:
#
# .ti +4
# alias_maps = hash:/etc/aliases,
# .ti +8
# ldap:/etc/postfix/ldap-aliases.cf
# .nf
# alias_maps = hash:/etc/aliases,
# ldap:/etc/postfix/ldap-aliases.cf
# .fi
#
# and in ldap:/etc/postfix/ldap-aliases.cf you have:
#
# .in +4
# server_host = ldap.example.com
# .br
# search_base = dc=example, dc=com
# .in -4
# .nf
# server_host = ldap.example.com
# search_base = dc=example, dc=com
# .fi
#
# Upon receiving mail for a local address "ldapuser" that
# isn't found in the /etc/aliases database, Postfix will

View File

@ -15,8 +15,9 @@
# Alternatively, lookup tables can be specified as MySQL databases.
# In order to use MySQL lookups, define a MySQL source as a lookup
# table in main.cf, for example:
# .ti +4
# alias_maps = mysql:/etc/mysql-aliases.cf
# .nf
# alias_maps = mysql:/etc/mysql-aliases.cf
# .fi
#
# The file /etc/postfix/mysql-aliases.cf has the same format as
# the Postfix main.cf file, and can specify the parameters
@ -48,14 +49,12 @@
# The old interface will be gradually phased out. To migrate to
# the new interface set:
#
# .ti +4
# \fBquery\fR = SELECT [\fIselect_field\fR]
# .ti +8
# FROM [\fItable\fR]
# .ti +8
# WHERE [\fIwhere_field\fR] = '%s'
# .ti +12
# [\fIadditional_conditions\fR]
# .nf
# \fBquery\fR = SELECT [\fIselect_field\fR]
# FROM [\fItable\fR]
# WHERE [\fIwhere_field\fR] = '%s'
# [\fIadditional_conditions\fR]
# .fi
#
# Insert the value, not the name, of each legacy parameter. Note
# that the \fBadditional_conditions\fR parameter is optional
@ -85,10 +84,10 @@
# The hosts that Postfix will try to connect to and query from.
# Specify \fIunix:\fR for UNIX domain sockets, \fIinet:\fR for TCP
# connections (default). Example:
# .ti +4
# hosts = host1.some.domain host2.some.domain
# .ti +4
# hosts = unix:/file/name
# .nf
# hosts = host1.some.domain host2.some.domain
# hosts = unix:/file/name
# .fi
#
# The hosts are tried in random order, with all connections over
# UNIX domain sockets being tried before those over TCP. The
@ -100,26 +99,28 @@
# prefix it with \fIinet:\fR), MySQL will connect to the default
# UNIX domain socket. In order to instruct MySQL to connect to
# localhost over TCP you have to specify
# .ti +4
# hosts = 127.0.0.1
# .nf
# hosts = 127.0.0.1
# .fi
# .IP "\fBuser, password\fR"
# The user name and password to log into the mysql server.
# Example:
# .in +4
# user = someone
# .br
# password = some_password
# .in -4
# .nf
# user = someone
# password = some_password
# .fi
# .IP "\fBdbname\fR"
# The database name on the servers. Example:
# .ti +4
# dbname = customer_database
# .nf
# dbname = customer_database
# .fi
# .IP "\fBquery\fR"
# The SQL query template used to search the database, where \fB%s\fR
# is a substitute for the address Postfix is trying to resolve,
# e.g.
# .ti +4
# query = SELECT replacement FROM aliases WHERE mailbox = '%s'
# .nf
# query = SELECT replacement FROM aliases WHERE mailbox = '%s'
# .fi
#
# This parameter supports the following '%' expansions:
# .RS
@ -166,14 +167,12 @@
# \fBadditional_conditions\fR. The mapping from the old parameters
# to the equivalent query is:
#
# .ti +4
# SELECT [\fBselect_field\fR]
# .ti +4
# FROM [\fBtable\fR]
# .ti +4
# WHERE [\fBwhere_field\fR] = '%s'
# .ti +10
# [\fBadditional_conditions\fR]
# .nf
# SELECT [\fBselect_field\fR]
# FROM [\fBtable\fR]
# WHERE [\fBwhere_field\fR] = '%s'
# [\fBadditional_conditions\fR]
# .fi
#
# The '%s' in the \fBWHERE\fR clause expands to the escaped search string.
# With Postfix 2.2 these legacy parameters are used if the \fBquery\fR
@ -229,8 +228,9 @@
# are eligible for lookup: 'user' lookups, bare domain lookups
# and "@domain" lookups are not performed. This can significantly
# reduce the query load on the MySQL server.
# .ti +4
# domain = postfix.org, hash:/etc/postfix/searchdomains
# .nf
# domain = postfix.org, hash:/etc/postfix/searchdomains
# .fi
#
# It is best not to use SQL to store the domains eligible
# for SQL lookups.
@ -250,14 +250,12 @@
# The following parameters can be used to fill in a
# SELECT template statement of the form:
#
# .ti +4
# SELECT [\fBselect_field\fR]
# .ti +4
# FROM [\fBtable\fR]
# .ti +4
# WHERE [\fBwhere_field\fR] = '%s'
# .ti +10
# [\fBadditional_conditions\fR]
# .nf
# SELECT [\fBselect_field\fR]
# FROM [\fBtable\fR]
# WHERE [\fBwhere_field\fR] = '%s'
# [\fBadditional_conditions\fR]
# .fi
#
# The specifier %s is replaced by the search string, and is
# escaped so if it contains single quotes or other odd characters,
@ -270,20 +268,24 @@
# interface may be removed in a future release.
# .IP "\fBselect_field\fR"
# The SQL "select" parameter. Example:
# .ti +4
# \fBselect_field\fR = forw_addr
# .nf
# \fBselect_field\fR = forw_addr
# .fi
# .IP "\fBtable\fR"
# The SQL "select .. from" table name. Example:
# .ti +4
# \fBtable\fR = mxaliases
# .nf
# \fBtable\fR = mxaliases
# .fi
# .IP "\fBwhere_field\fR
# The SQL "select .. where" parameter. Example:
# .ti +4
# \fBwhere_field\fR = alias
# .nf
# \fBwhere_field\fR = alias
# .fi
# .IP "\fBadditional_conditions\fR
# Additional conditions to the SQL query. Example:
# .ti +4
# \fBadditional_conditions\fR = AND status = 'paid'
# .nf
# \fBadditional_conditions\fR = AND status = 'paid'
# .fi
# SEE ALSO
# postmap(1), Postfix lookup table maintenance
# postconf(5), configuration parameters

View File

@ -24,8 +24,9 @@
# Most of the NIS+ query is specified via the NIS+ map name. The
# general format of a Postfix NIS+ map name is as follows:
#
# .ti +4
# \fBnisplus:[\fIname\fB=%s];\fIname.name.name\fB.:\fIcolumn\fR
# .fi
# \fBnisplus:[\fIname\fB=%s];\fIname.name.name\fB.:\fIcolumn\fR
# .fi
#
# Postfix NIS+ map names differ from what one normally
# would use with commands such as \fBniscat\fR:
@ -44,13 +45,13 @@
# of the table column that provides the lookup result. When
# no ":\fIcolumn\fR" is specified the first column (1) is used.
# EXAMPLE
# .ad
# .fi
# A NIS+ aliases map might be queried as follows:
#
# .ti +4
# alias_maps = dbm:/etc/mail/aliases,
# .ti +2
# .nf
# alias_maps = dbm:/etc/mail/aliases,
# nisplus:[alias=%s];mail_aliases.org_dir.$mydomain.:1
# .ad
# .fi
#
# This queries the local aliases file before the NIS+ file.

View File

@ -9,8 +9,8 @@
# \fBpostmap -q - pcre:/etc/postfix/\fIfilename\fR <\fIinputfile\fR
# DESCRIPTION
# The Postfix mail system uses optional tables for address
# rewriting or mail routing. These tables are usually in
# \fBdbm\fR or \fBdb\fR format.
# rewriting, mail routing, or access control. These tables
# are usually in \fBdbm\fR or \fBdb\fR format.
#
# Alternatively, lookup tables can be specified in Perl Compatible
# Regular Expression form. In this case, each input is compared

View File

@ -15,8 +15,9 @@
# Alternatively, lookup tables can be specified as PostgreSQL
# databases. In order to use PostgreSQL lookups, define a
# PostgreSQL source as a lookup table in main.cf, for example:
# .ti +4
# alias_maps = pgsql:/etc/pgsql-aliases.cf
# .nf
# alias_maps = pgsql:/etc/pgsql-aliases.cf
# .fi
#
# The file /etc/postfix/pgsql-aliases.cf has the same format as
# the Postfix main.cf file, and can specify the parameters
@ -52,19 +53,18 @@
# \fBwhere_field\fR and \fBadditional_conditions\fR parameters. To
# migrate to the new interface set:
#
# .ti +4
# \fBquery\fR = SELECT \fIselect_function\fR('%s')
# .nf
# \fBquery\fR = SELECT \fIselect_function\fR('%s')
# .fi
#
# or in the absence of \fBselection_function\fR, the lower precedence:
#
# .ti +4
# \fBquery\fR = SELECT \fIselect_field\fR
# .ti +8
# FROM \fItable\fR
# .ti +8
# WHERE \fIwhere_field\fR = '%s'
# .ti +12
# \fIadditional_conditions\fR
# .nf
# \fBquery\fR = SELECT \fIselect_field\fR
# FROM \fItable\fR
# WHERE \fIwhere_field\fR = '%s'
# \fIadditional_conditions\fR
# .fi
#
# Use the value, not the name, of each legacy parameter. Note
# that the \fBadditional_conditions\fR parameter is optional
@ -94,10 +94,10 @@
# The hosts that Postfix will try to connect to and query from.
# Specify \fIunix:\fR for UNIX-domain sockets, \fIinet:\fR for TCP
# connections (default). Example:
# .ti +4
# hosts = host1.some.domain host2.some.domain
# .ti +4
# hosts = unix:/file/name
# .nf
# hosts = host1.some.domain host2.some.domain
# hosts = unix:/file/name
# .fi
#
# The hosts are tried in random order, with all connections over
# UNIX domain sockets being tried before those over TCP. The
@ -112,21 +112,22 @@
# .IP "\fBuser, password\fR"
# The user name and password to log into the pgsql server.
# Example:
# .in +4
# user = someone
# .br
# password = some_password
# .in -4
# .nf
# user = someone
# password = some_password
# .fi
# .IP "\fBdbname\fR"
# The database name on the servers. Example:
# .ti +4
# dbname = customer_database
# .nf
# dbname = customer_database
# .fi
# .IP "\fBquery\fR"
# The SQL query template used to search the database, where \fB%s\fR
# is a substitute for the address Postfix is trying to resolve,
# e.g.
# .ti +4
# query = SELECT replacement FROM aliases WHERE mailbox = '%s'
# .nf
# query = SELECT replacement FROM aliases WHERE mailbox = '%s'
# .fi
#
# This parameter supports the following '%' expansions:
# .RS
@ -230,8 +231,9 @@
# are eligible for lookup: 'user' lookups, bare domain lookups
# and "@domain" lookups are not performed. This can significantly
# reduce the query load on the PostgreSQL server.
# .ti +4
# domain = postfix.org, hash:/etc/postfix/searchdomains
# .nf
# domain = postfix.org, hash:/etc/postfix/searchdomains
# .fi
#
# It is best not to use SQL to store the domains eligible
# for SQL lookups.
@ -251,12 +253,14 @@
# Pre-Postfix 2.2 legacy interfaces:
# .IP "\fBselect_function\fR"
# This parameter specifies a database function name. Example:
# .ti +4
# select_function = my_lookup_user_alias
# .nf
# select_function = my_lookup_user_alias
# .fi
#
# This is equivalent to:
# .ti +4
# query = SELECT my_lookup_user_alias('%s')
# .nf
# query = SELECT my_lookup_user_alias('%s')
# .fi
#
# This parameter overrides the legacy table-related fields (described
# below). With Postfix versions prior to 2.2, it also overrides the
@ -269,14 +273,12 @@
# \fBselect_function\fR interface described above) can be used to
# build the SQL select statement as follows:
#
# .ti +4
# SELECT [\fBselect_field\fR]
# .ti +4
# FROM [\fBtable\fR]
# .ti +4
# WHERE [\fBwhere_field\fR] = '%s'
# .ti +10
# [\fBadditional_conditions\fR]
# .nf
# SELECT [\fBselect_field\fR]
# FROM [\fBtable\fR]
# WHERE [\fBwhere_field\fR] = '%s'
# [\fBadditional_conditions\fR]
# .fi
#
# The specifier %s is replaced with each lookup by the lookup key
# and is escaped so if it contains single quotes or other odd
@ -290,20 +292,24 @@
# \fBquery\fR interface as this interface is slated to be phased out.
# .IP "\fBselect_field\fR"
# The SQL "select" parameter. Example:
# .ti +4
# \fBselect_field\fR = forw_addr
# .nf
# \fBselect_field\fR = forw_addr
# .fi
# .IP "\fBtable\fR"
# The SQL "select .. from" table name. Example:
# .ti +4
# \fBtable\fR = mxaliases
# .nf
# \fBtable\fR = mxaliases
# .fi
# .IP "\fBwhere_field\fR
# The SQL "select .. where" parameter. Example:
# .ti +4
# \fBwhere_field\fR = alias
# .nf
# \fBwhere_field\fR = alias
# .fi
# .IP "\fBadditional_conditions\fR
# Additional conditions to the SQL query. Example:
# .ti +4
# \fBadditional_conditions\fR = AND status = 'paid'
# .nf
# \fBadditional_conditions\fR = AND status = 'paid'
# .fi
# SEE ALSO
# postmap(1), Postfix lookup table manager
# postconf(5), configuration parameters

View File

@ -9,8 +9,8 @@
# \fBpostmap -q - regexp:/etc/postfix/\fIfilename\fR <\fIinputfile\fR
# DESCRIPTION
# The Postfix mail system uses optional tables for address
# rewriting or mail routing. These tables are usually in
# \fBdbm\fR or \fBdb\fR format.
# rewriting, mail routing, or access control. These tables
# are usually in \fBdbm\fR or \fBdb\fR format.
#
# Alternatively, lookup tables can be specified in POSIX regular
# expression form. In this case, each input is compared against a

View File

@ -39,9 +39,11 @@
# The input format for the \fBpostmap\fR(1) command is as follows:
# .IP \(bu
# An entry has one of the following form:
# .ti +5
# \fIpattern new_location\fR
# .br
#
# .nf
# \fIpattern new_location\fR
# .fi
#
# Where \fInew_location\fR specifies contact information such as
# an email address, or perhaps a street address or telephone number.
# .IP \(bu

View File

@ -11,7 +11,10 @@
# \fBpostmap -q - /etc/postfix/transport <\fIinputfile\fR
# DESCRIPTION
# The optional \fBtransport\fR(5) table specifies a mapping from email
# addresses to message delivery transports and next-hop hosts. The
# addresses to message delivery transports and next-hop destinations.
# Message delivery transports such as \fBlocal\fR or \fBsmtp\fR
# are defined in the \fBmaster.cf\fR file, and next-hop
# destinations are typically hosts or domain names. The
# table is searched by the \fBtrivial-rewrite\fR(8) daemon.
#
# This mapping overrides the default \fItransport\fR:\fInexthop\fR
@ -149,20 +152,19 @@
# the nexthop information) and specify a wildcard for all other
# destinations.
#
# .ti +5
# \fB\&my.domain :\fR
# .ti +5
# \fB\&.my.domain :\fR
# .ti +5
# \fB* smtp:outbound-relay.my.domain\fR
# .nf
# \fB\&my.domain :\fR
# \fB\&.my.domain :\fR
# \fB* smtp:outbound-relay.my.domain\fR
# .fi
#
# In order to send mail for \fBexample.com\fR and its subdomains
# via the \fBuucp\fR transport to the UUCP host named \fBexample\fR:
#
# .ti +5
# \fBexample.com uucp:example\fR
# .ti +5
# \fB\&.example.com uucp:example\fR
# .nf
# \fBexample.com uucp:example\fR
# \fB\&.example.com uucp:example\fR
# .fi
#
# When no nexthop host name is specified, the destination domain
# name is used instead. For example, the following directs mail for
@ -170,18 +172,19 @@
# exchanger for \fBexample.com\fR. The \fBslow\fR transport could be
# configured to run at most one delivery process at a time:
#
# .ti +5
# \fBexample.com slow:\fR
# .nf
# \fBexample.com slow:\fR
# .fi
#
# When no transport is specified, Postfix uses the transport that
# matches the address domain class (see DESCRIPTION
# above). The following sends all mail for \fBexample.com\fR and its
# subdomains to host \fBgateway.example.com\fR:
#
# .ti +5
# \fBexample.com :[gateway.example.com]\fR
# .ti +5
# \fB\&.example.com :[gateway.example.com]\fR
# .nf
# \fBexample.com :[gateway.example.com]\fR
# \fB\&.example.com :[gateway.example.com]\fR
# .fi
#
# In the above example, the [] suppress MX lookups.
# This prevents mail routing loops when your machine is primary MX
@ -190,8 +193,9 @@
# In the case of delivery via SMTP, one may specify
# \fIhostname\fR:\fIservice\fR instead of just a host:
#
# .ti +5
# \fBexample.com smtp:bar.example:2025\fR
# .nf
# \fBexample.com smtp:bar.example:2025\fR
# .fi
#
# This directs mail for \fIuser\fR@\fBexample.com\fR to host \fBbar.example\fR
# port \fB2025\fR. Instead of a numerical port a symbolic name may be
@ -199,8 +203,9 @@
#
# The error mailer can be used to bounce mail:
#
# .ti +5
# \fB\&.example.com error:mail for *.example.com is not deliverable\fR
# .nf
# \fB\&.example.com error:mail for *.example.com is not deliverable\fR
# .fi
#
# This causes all mail for \fIuser\fR@\fIanything\fB.example.com\fR
# to be bounced.
@ -220,9 +225,10 @@
# Patterns are applied in the order as specified in the table, until a
# pattern is found that matches the search string.
#
# Results are the same as with indexed file lookups, with
# the additional feature that parenthesized substrings from the
# pattern can be interpolated as \fB$1\fR, \fB$2\fR and so on.
# The \fBtrivial-rewrite\fR(8) server disallows regular
# expression substitution of $1 etc. in regular expression
# lookup tables, because that could open a security hole
# (Postfix version 2.3 and later).
# TCP-BASED TABLES
# .ad
# .fi

View File

@ -96,8 +96,9 @@
# Postfix SMTP server accepts
# mail for any recipient in \fIdomain\fR, regardless of whether
# that recipient exists. This may turn your mail system into
# a backscatter source that returns undeliverable spam to
# innocent people.
# a backscatter source: Postfix first accepts mail for
# non-existent recipients and then tries to return that mail
# as "undeliverable" to the often forged sender address.
# RESULT ADDRESS REWRITING
# .ad
# .fi
@ -144,24 +145,20 @@
#
# Support for a virtual alias domain looks like:
#
# .nf
# /etc/postfix/main.cf:
# .in +4
# virtual_alias_maps = hash:/etc/postfix/virtual
# virtual_alias_maps = hash:/etc/postfix/virtual
# .fi
#
# Note: some systems use \fBdbm\fR databases instead of \fBhash\fR.
# See the output from "\fBpostconf -m\fR" for available database types.
#
# .ti -4
# /etc/postfix/virtual:
# .nf
# .na
# \fIvirtual-alias.domain anything\fR (right-hand content does not matter)
# \fIpostmaster@virtual-alias.domain postmaster\fR
# \fIuser1@virtual-alias.domain address1\fR
# \fIuser2@virtual-alias.domain address2, address3\fR
# .fi
# .in -4
# .ad
# /etc/postfix/virtual:
# \fIvirtual-alias.domain anything\fR (right-hand content does not matter)
# \fIpostmaster@virtual-alias.domain postmaster\fR
# \fIuser1@virtual-alias.domain address1\fR
# \fIuser2@virtual-alias.domain address2, address3\fR
# .fi
# .sp
# The \fIvirtual-alias.domain anything\fR entry is required for a

View File

@ -23,81 +23,74 @@
/* .fi
/* To register a new connection send the following request to
/* the \fBanvil\fR(8) server:
/* .PP
/* .in +4
/* \fBrequest=connect\fR
/* .br
/* \fBident=\fIstring\fR
/* .in
/* .PP
/*
/* .nf
/* \fBrequest=connect\fR
/* \fBident=\fIstring\fR
/* .fi
/*
/* The \fBanvil\fR(8) server answers with the number of
/* simultaneous connections and the number of connections per
/* unit time for the (service, client) combination specified
/* with \fBident\fR:
/* .PP
/* .in +4
/* \fBstatus=0\fR
/* .br
/* \fBcount=\fInumber\fR
/* .br
/* \fBrate=\fInumber\fR
/* .in
/* .PP
/*
/* .nf
/* \fBstatus=0\fR
/* \fBcount=\fInumber\fR
/* \fBrate=\fInumber\fR
/* .fi
/*
/* To register a disconnect event send the following request
/* to the \fBanvil\fR(8) server:
/* .PP
/* .in +4
/* \fBrequest=disconnect\fR
/* .br
/* \fBident=\fIstring\fR
/* .in
/* .PP
/*
/* .nf
/* \fBrequest=disconnect\fR
/* \fBident=\fIstring\fR
/* .fi
/*
/* The \fBanvil\fR(8) server replies with:
/* .PP
/* .ti +4
/* \fBstatus=0\fR
/*
/* .nf
/* \fBstatus=0\fR
/* .fi
/* MESSAGE RATE CONTROL
/* .ad
/* .fi
/* To register a message delivery request send the following
/* request to the \fBanvil\fR(8) server:
/* .PP
/* .in +4
/* \fBrequest=message\fR
/* .br
/* \fBident=\fIstring\fR
/* .in
/* .PP
/*
/* .nf
/* \fBrequest=message\fR
/* \fBident=\fIstring\fR
/* .fi
/*
/* The \fBanvil\fR(8) server answers with the number of message
/* delivery requests per unit time for the (service, client)
/* combination specified with \fBident\fR:
/* .PP
/* .in +4
/* \fBstatus=0\fR
/* .br
/* \fBrate=\fInumber\fR
/* .in
/*
/* .nf
/* \fBstatus=0\fR
/* \fBrate=\fInumber\fR
/* .fi
/* RECIPIENT RATE CONTROL
/* .ad
/* .fi
/* To register a recipient request send the following request
/* to the \fBanvil\fR(8) server:
/* .PP
/* .in +4
/* \fBrequest=recipient\fR
/* .br
/* \fBident=\fIstring\fR
/* .in
/* .PP
/*
/* .nf
/* \fBrequest=recipient\fR
/* \fBident=\fIstring\fR
/* .fi
/*
/* The \fBanvil\fR(8) server answers with the number of recipient
/* addresses per unit time for the (service, client) combination
/* specified with \fBident\fR:
/* .PP
/* .in +4
/* \fBstatus=0\fR
/* .br
/* \fBrate=\fInumber\fR
/* .in
/*
/* .nf
/* \fBstatus=0\fR
/* \fBrate=\fInumber\fR
/* .fi
/* TLS SESSION NEGOTIATION RATE CONTROL
/* .ad
/* .fi
@ -106,41 +99,37 @@
/*
/* To register a request for a new (i.e. not cached) TLS session
/* send the following request to the \fBanvil\fR(8) server:
/* .PP
/* .in +4
/* \fBrequest=newtls\fR
/* .br
/* \fBident=\fIstring\fR
/* .in
/* .PP
/*
/* .nf
/* \fBrequest=newtls\fR
/* \fBident=\fIstring\fR
/* .fi
/*
/* The \fBanvil\fR(8) server answers with the number of new
/* TLS session requests per unit time for the (service, client)
/* combination specified with \fBident\fR:
/* .PP
/* .in +4
/* \fBstatus=0\fR
/* .br
/* \fBrate=\fInumber\fR
/* .in
/* .PP
/*
/* .nf
/* \fBstatus=0\fR
/* \fBrate=\fInumber\fR
/* .fi
/*
/* To retrieve new TLS session request rate information without
/* updating the counter information, send:
/* .PP
/* .in +4
/* \fBrequest=newtls_report\fR
/* .br
/* \fBident=\fIstring\fR
/* .in
/* .PP
/*
/* .nf
/* \fBrequest=newtls_report\fR
/* \fBident=\fIstring\fR
/* .fi
/*
/* The \fBanvil\fR(8) server answers with the number of new
/* TLS session requests per unit time for the (service, client)
/* combination specified with \fBident\fR:
/* .PP
/* .in +4
/* \fBstatus=0\fR
/* .br
/* \fBrate=\fInumber\fR
/* .in
/*
/* .nf
/* \fBstatus=0\fR
/* \fBrate=\fInumber\fR
/* .fi
/* SECURITY
/* .ad
/* .fi

View File

@ -9,7 +9,7 @@ This is the mail system at host $myhostname.
I'm sorry to have to inform you that your message could not
be delivered to one or more recipients. It's attached below.
For further assistance, please send mail to <postmaster>
For further assistance, please send mail to postmaster.
If you do so, please include this problem report. You can
delete your own text from the attached returned message.
@ -32,7 +32,7 @@ This is the mail system at host $myhostname.
Your message could not be delivered for more than $delay_warning_time_hours hour(s).
It will be retried until it is $maximal_queue_lifetime_days day(s) old.
For further assistance, please send mail to <postmaster>
For further assistance, please send mail to postmaster.
If you do so, please include this problem report. You can
delete your own text from the attached returned message.
@ -77,7 +77,7 @@ This is the mail system at host $myhostname.
I'm sorry to have to inform you that your message could not
be delivered to one or more recipients. It's attached below.
For further assistance, please send mail to <postmaster>
For further assistance, please send mail to postmaster.
If you do so, please include this problem report. You can
delete your own text from the attached returned message.
@ -100,7 +100,7 @@ This is the mail system at host $myhostname.
Your message could not be delivered for more than $delay_warning_time_hours hour(s).
It will be retried until it is $maximal_queue_lifetime_days day(s) old.
For further assistance, please send mail to <postmaster>
For further assistance, please send mail to postmaster.
If you do so, please include this problem report. You can
delete your own text from the attached returned message.

View File

@ -9,7 +9,7 @@ This is the mail system at host $myhostname.
I'm sorry to have to inform you that your message could not
be delivered to one or more recipients. It's attached below.
For further assistance, please send mail to <postmaster>
For further assistance, please send mail to postmaster.
If you do so, please include this problem report. You can
delete your own text from the attached returned message.
@ -32,7 +32,7 @@ This is the mail system at host $myhostname.
Your message could not be delivered for more than $delay_warning_time_hours hour(s).
It will be retried until it is $maximal_queue_lifetime_days day(s) old.
For further assistance, please send mail to <postmaster>
For further assistance, please send mail to postmaster.
If you do so, please include this problem report. You can
delete your own text from the attached returned message.

View File

@ -20,8 +20,8 @@
* Patches change both the patchlevel and the release date. Snapshots have no
* patchlevel; they change the release date only.
*/
#define MAIL_RELEASE_DATE "20070325"
#define MAIL_VERSION_NUMBER "2.4"
#define MAIL_RELEASE_DATE "20070328"
#define MAIL_VERSION_NUMBER "2.5"
#ifdef SNAPSHOT
# define MAIL_VERSION_DATE "-" MAIL_RELEASE_DATE

View File

@ -29,9 +29,10 @@
/*
/* To prevent Postfix from sending multiple recipients per delivery
/* request, specify
/*
/* .ti +4
/* \fItransport\fB_destination_recipient_limit = 1\fR
/* .sp
/* .nf
/* \fItransport\fB_destination_recipient_limit = 1\fR
/* .fi
/*
/* in the Postfix \fBmain.cf\fR file, where \fItransport\fR
/* is the name in the first column of the Postfix \fBmaster.cf\fR
@ -135,17 +136,19 @@
/* Caution: a null sender address is easily mis-parsed by
/* naive software. For example, when the \fBpipe\fR(8) daemon
/* executes a command such as:
/*
/* .ti +4
/* command -f$sender -- $recipient (\fIbad\fR)
/*
/* .sp
/* .nf
/* command -f$sender -- $recipient (\fIbad\fR)
/* .fi
/* .IP
/* the command will mis-parse the -f option value when the
/* sender address is a null string. For correct parsing,
/* specify \fB$sender\fR as an argument by itself:
/*
/* .ti +4
/* command -f $sender -- $recipient (\fIgood\fR)
/*
/* .sp
/* .nf
/* command -f $sender -- $recipient (\fIgood\fR)
/* .fi
/* .IP
/* This feature is available with Postfix 2.3 and later.
/* .IP "\fBsize\fR=\fIsize_limit\fR (optional)"
/* Messages greater in size than this limit (in bytes) will

View File

@ -13,8 +13,9 @@
/* lookup tables, or updates an existing one. The input and output
/* file formats are expected to be compatible with:
/*
/* .ti +4
/* \fBmakemap \fIfile_type\fR \fIfile_name\fR < \fIfile_name\fR
/* .nf
/* \fBmakemap \fIfile_type\fR \fIfile_name\fR < \fIfile_name\fR
/* .fi
/*
/* If the result files do not exist they will be created with the
/* same group and other read permissions as their source file.
@ -30,8 +31,9 @@
/* .IP \(bu
/* A table entry has the form
/* .sp
/* .ti +5
/* \fIkey\fR whitespace \fIvalue\fR
/* .nf
/* \fIkey\fR whitespace \fIvalue\fR
/* .fi
/* .IP \(bu
/* Empty lines and whitespace-only lines are ignored, as
/* are lines whose first non-whitespace character is a `#'.

View File

@ -36,15 +36,13 @@
/* queue IDs from standard input. For example, to delete all mail
/* with exactly one recipient \fBuser@example.com\fR:
/* .sp
/* .nf
/* mailq | tail +2 | grep -v '^ *(' | awk \'BEGIN { RS = "" }
/* .ti +4
/* # $7=sender, $8=recipient1, $9=recipient2
/* .ti +4
/* { if ($8 == "user@example.com" && $9 == "")
/* .ti +10
/* print $1 }
/* .br
/* # $7=sender, $8=recipient1, $9=recipient2
/* { if ($8 == "user@example.com" && $9 == "")
/* print $1 }
/* \' | tr -d '*!' | postsuper -d -
/* .fi
/* .sp
/* Specify "\fB-d ALL\fR" to remove all messages; for example, specify
/* "\fB-d ALL deferred\fR" to delete all mail in the \fBdeferred\fR queue.

View File

@ -16,18 +16,20 @@
/* practical to maintain a copy of the passwd file in the chroot
/* jail. The solution:
/* .sp
/* .nf
/* local_recipient_maps =
/* .ti +4
/* proxy:unix:passwd.byname $alias_maps
/* proxy:unix:passwd.byname $alias_maps
/* .fi
/* .IP \(bu
/* To consolidate the number of open lookup tables by sharing
/* one open table among multiple processes. For example, making
/* mysql connections from every Postfix daemon process results
/* in "too many connections" errors. The solution:
/* .sp
/* .nf
/* virtual_alias_maps =
/* .ti +4
/* proxy:mysql:/etc/postfix/virtual_alias.cf
/* proxy:mysql:/etc/postfix/virtual_alias.cf
/* .fi
/* .sp
/* The total number of connections is limited by the number of
/* proxymap server processes.

View File

@ -26,8 +26,9 @@
/*
/* The mailbox pathname is constructed as follows:
/*
/* .ti +2
/* \fB$virtual_mailbox_base/$virtual_mailbox_maps(\fIrecipient\fB)\fR
/* .nf
/* \fB$virtual_mailbox_base/$virtual_mailbox_maps(\fIrecipient\fB)\fR
/* .fi
/*
/* where \fIrecipient\fR is the full recipient address.
/* UNIX MAILBOX FORMAT