mirror of
https://github.com/vdukhovni/postfix
synced 2025-08-29 13:18:12 +00:00
postfix-2.3.1
This commit is contained in:
parent
8236a6ce4c
commit
bfbbcb2a17
@ -12188,17 +12188,18 @@ Apologies for any names omitted.
|
|||||||
20060510
|
20060510
|
||||||
|
|
||||||
Preliminary TLS_README and postconf(5) changes completed.
|
Preliminary TLS_README and postconf(5) changes completed.
|
||||||
|
Victor Duchovni.
|
||||||
|
|
||||||
Added smtp_tls_policy_maps and smtp_tls_protocols features
|
Added smtp_tls_policy_maps and smtp_tls_protocols features
|
||||||
to the smtp/lmtp client, changed smtp_tls_cipherlist to
|
to the smtp/lmtp client, changed smtp_tls_cipherlist to
|
||||||
only apply when TLS is mandatory.
|
only apply when TLS is mandatory. Victor Duchovni.
|
||||||
|
|
||||||
20060512
|
20060512
|
||||||
|
|
||||||
Destinations that share a common server may have distinct
|
Destinations that share a common server may have distinct
|
||||||
TLS protocol and cipherlist requirements, with mandatory
|
TLS protocol and cipherlist requirements, with mandatory
|
||||||
TLS add the protocol and cipherlist values to the TLS session
|
TLS add the protocol and cipherlist values to the TLS session
|
||||||
lookup key.
|
lookup key. Victor Duchovni.
|
||||||
|
|
||||||
20060516
|
20060516
|
||||||
|
|
||||||
@ -12228,14 +12229,14 @@ Apologies for any names omitted.
|
|||||||
|
|
||||||
The smtp_tls_policy_maps table now implements parent domain
|
The smtp_tls_policy_maps table now implements parent domain
|
||||||
matching for destinations that are bare domains (without
|
matching for destinations that are bare domains (without
|
||||||
enclosin [] or optional :port suffix). This allows one to
|
enclosing [] or optional :port suffix). This allows one to
|
||||||
set TLS policy for a domain and all sub-domains. Victor
|
set TLS policy for a domain and all sub-domains. Victor
|
||||||
Duchovni.
|
Duchovni.
|
||||||
|
|
||||||
20060519
|
20060519
|
||||||
|
|
||||||
The same parameter can bind to different variables in
|
The same parameter can bind to different variables in
|
||||||
different daemons, ignore the variable name when eliminating
|
different daemons. Ignore the variable name when eliminating
|
||||||
duplicates in extract.awk. Victor Duchovni.
|
duplicates in extract.awk. Victor Duchovni.
|
||||||
|
|
||||||
20060523
|
20060523
|
||||||
@ -12482,7 +12483,7 @@ Apologies for any names omitted.
|
|||||||
after an opportunistic TLS handshake fails. Specify
|
after an opportunistic TLS handshake fails. Specify
|
||||||
"smtp_sasl_auth_enforce = no" to deliver mail anyway. File:
|
"smtp_sasl_auth_enforce = no" to deliver mail anyway. File:
|
||||||
smtp/smtp_proto.c. See workaround 20060711 for sender-dependent
|
smtp/smtp_proto.c. See workaround 20060711 for sender-dependent
|
||||||
SASL passwords.
|
SASL passwords. This was undone with the 20060719 workaround.
|
||||||
|
|
||||||
20060709
|
20060709
|
||||||
|
|
||||||
@ -12523,9 +12524,10 @@ Apologies for any names omitted.
|
|||||||
after the header label and ":" in an interesting manner.
|
after the header label and ":" in an interesting manner.
|
||||||
It eats one space (not tab). File: milter/milter8.c.
|
It eats one space (not tab). File: milter/milter8.c.
|
||||||
|
|
||||||
Workaround: if sender-depedendent SASL passwords are enabled,
|
Workaround: if sender-dependent SASL passwords are enabled,
|
||||||
don't defer delivery when a SASL password exists but the
|
don't defer delivery when a SASL password exists but the
|
||||||
server doesn't announce SASL support. File: smtp/smtp_proto.c.
|
server doesn't announce SASL support. File: smtp/smtp_proto.c.
|
||||||
|
This was undone with the 20060719 workaround.
|
||||||
|
|
||||||
Cleanup: format of cleanup milter reject messages. File:
|
Cleanup: format of cleanup milter reject messages. File:
|
||||||
cleanup_milter.c.
|
cleanup_milter.c.
|
||||||
@ -12533,3 +12535,79 @@ Apologies for any names omitted.
|
|||||||
Bugfix: file/memory leak if a transfer of multiple milters
|
Bugfix: file/memory leak if a transfer of multiple milters
|
||||||
from smtpd to cleanup broke in the middle. Found by Coverity.
|
from smtpd to cleanup broke in the middle. Found by Coverity.
|
||||||
File: milter/milter.c.
|
File: milter/milter.c.
|
||||||
|
|
||||||
|
20060716
|
||||||
|
|
||||||
|
Bugfix: "sendmail -bs" panic caused by a missing
|
||||||
|
SMTPD_STATE_ALONE() guard before a milter_abort() call.
|
||||||
|
File: smtpd/smtpd.c.
|
||||||
|
|
||||||
|
Bugfix (bug introduced with Postfix 2.2): the Postfix SMTP
|
||||||
|
client enforced Mandatory TLS only when talking to an ESMTP
|
||||||
|
server; enforcement did not happen if Postfix could somehow
|
||||||
|
be forced to send HELO instead of EHLO. Victor Duchovni.
|
||||||
|
File: src/smtp/smtp_proto.c.
|
||||||
|
|
||||||
|
20060718
|
||||||
|
|
||||||
|
Bugfix (bug introduced 20060711): null pointer bug when
|
||||||
|
rejecting SMTP mail with Milter application. File:
|
||||||
|
cleanup/cleanup_milter.c.
|
||||||
|
|
||||||
|
Workaround (problem introduced in 200605/200606 TLS update):
|
||||||
|
the Postfix SMTP server now issues TLS session IDs even
|
||||||
|
when TLS session caching is turned off, otherwise MS Outlook
|
||||||
|
fails to deliver mail. There may also be interoperability
|
||||||
|
issues with other MTAs that we haven't discovered yet.
|
||||||
|
Specify "smtpd_tls_always_issue_session_ids = no" to disable
|
||||||
|
the workaround. Victor Duchovni. Files: smtpd/smtpd.c,
|
||||||
|
tls/tls_server.c.
|
||||||
|
|
||||||
|
20060719
|
||||||
|
|
||||||
|
Cleanup: the smtp_sasl_auth_enforce feature is gone. It was
|
||||||
|
meant to work around a problem that was introduced with
|
||||||
|
plaintext fallback after a failed TLS handshake. Unfortunately,
|
||||||
|
it created more problems than it solved. We now address the
|
||||||
|
underlying problem more directly as described next. File:
|
||||||
|
smtp/smtp_proto.c.
|
||||||
|
|
||||||
|
Safety: don't fall back to plaintext delivery after failed
|
||||||
|
TLS handshake, when the Postfix SMTP client would have
|
||||||
|
attempted to log in with SASL after successful TLS handshake.
|
||||||
|
This avoids undesirable behavior regardless of whether the
|
||||||
|
server does support SASL over plaintext (unexpected password
|
||||||
|
disclosure) and whether the server doesn't support SASL
|
||||||
|
over plaintext (insufficient mail relay permission). Files:
|
||||||
|
smtp/smtp_connect.c, smtp/smtp_session.c, smtp/smtp_proto.c.
|
||||||
|
|
||||||
|
20060720
|
||||||
|
|
||||||
|
Compatibility: replace %% in milter replies by %, and strip
|
||||||
|
single (i.e. invalid) % characters. File: milter/milter8.c.
|
||||||
|
|
||||||
|
Compatibility: $_ macro support for Milter applications.
|
||||||
|
Files: smtpd/smtpd.c, smtpd/smtpd_milter.c,
|
||||||
|
cleanup/cleanup_state.c, cleanup/cleanup_milter.c.
|
||||||
|
|
||||||
|
20060721
|
||||||
|
|
||||||
|
Safety: disable Milter processing after "postsuper -r". If
|
||||||
|
the mail has been filtered there is no need to do it again.
|
||||||
|
Moreover, when mail has passed through an external content
|
||||||
|
filter, we don't have sufficient information to reproduce
|
||||||
|
the exact same SMTP events and Sendmail macros that Milters
|
||||||
|
received when the mail originally arrived in Postfix. This
|
||||||
|
change does not affect Milter applications that run behind
|
||||||
|
an after-queue content filter. File: pickup/pickup.c.
|
||||||
|
|
||||||
|
Bugfix: Milters received a truncated ORCPT=xxx parameter
|
||||||
|
due to destructive parsing of something that didn't have
|
||||||
|
to be preserved before Milter support was added to Postfix.
|
||||||
|
File: smtpd/smtpd.c.
|
||||||
|
|
||||||
|
20060724
|
||||||
|
|
||||||
|
Bugfix: when updating the same header multiple times, the
|
||||||
|
Postfix Milter client created a queue file that caused
|
||||||
|
delivery agents to loop. File: cleanup/cleanup_milter.c.
|
||||||
|
@ -61,6 +61,8 @@ depend_update:
|
|||||||
tidy: clean
|
tidy: clean
|
||||||
rm -f Makefile */Makefile src/*/Makefile
|
rm -f Makefile */Makefile src/*/Makefile
|
||||||
cp Makefile.init Makefile
|
cp Makefile.init Makefile
|
||||||
|
rm -f README_FILES/RELEASE_NOTES
|
||||||
|
ln -s ../RELEASE_NOTES README_FILES
|
||||||
rm -f bin/[!CRS]* lib/[!CRS]* include/[!CRS]* libexec/[!CRS]* \
|
rm -f bin/[!CRS]* lib/[!CRS]* include/[!CRS]* libexec/[!CRS]* \
|
||||||
junk */junk */*/junk \
|
junk */junk */*/junk \
|
||||||
*core */*core */*/*core \
|
*core */*core */*/*core \
|
||||||
|
@ -74,7 +74,7 @@ BBuuiillddiinngg PPoossttffiixx oonn BBSSDD ssyysstteem
|
|||||||
Some BSD systems ship with multiple Berkeley DB implementations. Normally,
|
Some BSD systems ship with multiple Berkeley DB implementations. Normally,
|
||||||
Postfix builds with the default DB version that ships with the system.
|
Postfix builds with the default DB version that ships with the system.
|
||||||
|
|
||||||
To build Postfix on BSD systems with a specific DB version, use a variant of
|
To build Postfix on BSD systems with a non-default DB version, use a variant of
|
||||||
the following commands:
|
the following commands:
|
||||||
|
|
||||||
% make tidy
|
% make tidy
|
||||||
|
@ -344,12 +344,10 @@ the Postfix master.cf file:
|
|||||||
real client name IP address. See smtp(8) and XFORWARD_README for more
|
real client name IP address. See smtp(8) and XFORWARD_README for more
|
||||||
information.
|
information.
|
||||||
|
|
||||||
* With "-o disable_mime_output_conversion=yes", the scan delivery agent will
|
* The "-o disable_mime_output_conversion=yes" is a workaround that prevents
|
||||||
not convert 8BITMIME mail to quoted-printable form while delivering to the
|
the breaking of domainkeys and other digital signatures. This is needed
|
||||||
content filter, as that would invalidate domainkeys and other digital
|
because some SMTP-based content filters don't announce 8BITMIME support,
|
||||||
signatures. This workaround is needed because some SMTP-based content
|
even though they can handle it just fine.
|
||||||
filters don't announce 8BITMIME support, even though they can handle it
|
|
||||||
just fine.
|
|
||||||
|
|
||||||
AAddvvaanncceedd ccoonntteenntt ffiilltteerr:: rruunnnniinngg tthhee ccoonntteenntt ffiilltteerr
|
AAddvvaanncceedd ccoonntteenntt ffiilltteerr:: rruunnnniinngg tthhee ccoonntteenntt ffiilltteerr
|
||||||
|
|
||||||
|
@ -5,10 +5,15 @@ PPoossttffiixx aanndd LLiinnuuxx
|
|||||||
BBeerrkkeelleeyy DDBB iissssuueess
|
BBeerrkkeelleeyy DDBB iissssuueess
|
||||||
|
|
||||||
Warning: if you can't compile Postfix because the file "db.h" isn't found, then
|
Warning: if you can't compile Postfix because the file "db.h" isn't found, then
|
||||||
you MUST install the Berkeley DB development package (package name: db???-
|
you MUST install the Berkeley DB development package (name: db???-devel-???)
|
||||||
devel-???) that comes with your Linux system. Only that package contains the
|
that matches your system library. You can find out what is installed with the
|
||||||
files that correspond to the Berkeley DB version that is used by the system
|
rpm command. For example:
|
||||||
library routines.
|
|
||||||
|
$ rrppmm --qqff //uussrr//lliibb//lliibbddbb..ssoo
|
||||||
|
db4-4.3.29-2
|
||||||
|
|
||||||
|
This means that you need to install db4-devel-4.3.29-2 (on some systems,
|
||||||
|
specify /lib/libdb.so in the rpm query).
|
||||||
|
|
||||||
DO NOT download some Berkeley DB version from the network. Every Postfix
|
DO NOT download some Berkeley DB version from the network. Every Postfix
|
||||||
program will dump core when it is built with a different Berkeley DB version
|
program will dump core when it is built with a different Berkeley DB version
|
||||||
|
@ -104,7 +104,7 @@ On other platforms you have two options:
|
|||||||
Sendmail source code instead:
|
Sendmail source code instead:
|
||||||
|
|
||||||
$ ggzzccaatt sseennddmmaaiill--xx..yy..zz..ttaarr..ggzz || ttaarr xxff --
|
$ ggzzccaatt sseennddmmaaiill--xx..yy..zz..ttaarr..ggzz || ttaarr xxff --
|
||||||
$ ccdd sseennddmmaaiill--xx..yy..zz
|
$ ccdd sseennddmmaaiill--xx..yy..zz//lliibbmmiilltteerr
|
||||||
$ mmaakkee
|
$ mmaakkee
|
||||||
[...lots of output omitted...]
|
[...lots of output omitted...]
|
||||||
|
|
||||||
@ -316,6 +316,9 @@ workarounds section below for solutions.
|
|||||||
|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |
|
|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |
|
||||||
|j |Always |value of myhostname |
|
|j |Always |value of myhostname |
|
||||||
|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |
|
|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |
|
||||||
|
|_ |Always |The validated client name |
|
||||||
|
| | |and address |
|
||||||
|
|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |
|
||||||
|{auth_authen} |MAIL, DATA, EOM |SASL login name |
|
|{auth_authen} |MAIL, DATA, EOM |SASL login name |
|
||||||
|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |
|
|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |
|
||||||
|{auth_author} |MAIL, DATA, EOM |SASL sender |
|
|{auth_author} |MAIL, DATA, EOM |SASL sender |
|
||||||
@ -382,9 +385,9 @@ message).
|
|||||||
WWoorrkkaarroouunnddss
|
WWoorrkkaarroouunnddss
|
||||||
|
|
||||||
Content filters may break domain key etc. signatures. If you use an SMTP-based
|
Content filters may break domain key etc. signatures. If you use an SMTP-based
|
||||||
filter as described in FILTER_README, then you should add a line to master.cf
|
content filter, then you should add a line to master.cf with "-
|
||||||
with "disable_mime_output_conversion = yes", as described in the advanced
|
o disable_mime_output_conversion=yes" (note: no spaces around the "="), as
|
||||||
content filter example.
|
described in the advanced content filter example.
|
||||||
|
|
||||||
Sendmail Milter applications were originally developed for the Sendmail version
|
Sendmail Milter applications were originally developed for the Sendmail version
|
||||||
8 MTA, which has a different architecture than Postfix. The result is that some
|
8 MTA, which has a different architecture than Postfix. The result is that some
|
||||||
|
@ -1,113 +0,0 @@
|
|||||||
The stable Postfix release is called postfix-2.2.x where 2=major
|
|
||||||
release number, 2=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.3-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.1 and earlier
|
|
||||||
============================================
|
|
||||||
|
|
||||||
If you upgrade from Postfix 2.1 or earlier, read RELEASE_NOTES-2.2
|
|
||||||
before proceeding.
|
|
||||||
|
|
||||||
Major changes with snapshot 20050510
|
|
||||||
====================================
|
|
||||||
|
|
||||||
This release improves usability of DSN (enhanced status codes) in
|
|
||||||
Postfix access tables, RBL reply templates and in transport maps
|
|
||||||
that use the error(8) delivery agent.
|
|
||||||
|
|
||||||
- When the SMTP server rejects a sender address, it transforms a
|
|
||||||
recipient DSN status (e.g., 4.1.1-4.1.6) into the corresponding
|
|
||||||
sender DSN status, and vice versa.
|
|
||||||
|
|
||||||
- When the SMTP server rejects non-address information (such as the
|
|
||||||
HELO command parameter or the client hostname/address), it
|
|
||||||
transforms a sender or recipient DSN status into a generic
|
|
||||||
non-address DSN status (e.g., 4.0.0).
|
|
||||||
|
|
||||||
These transformations are needed when the same access table or RBL
|
|
||||||
reply template are used for client, helo, sender, or recipient
|
|
||||||
restrictions; or when the same error(8) mailer information is used
|
|
||||||
for both senders and recipients.
|
|
||||||
|
|
||||||
Incompatibility with snapshot 20050503
|
|
||||||
======================================
|
|
||||||
|
|
||||||
The format of some "warning:" messages in the maillog has changed
|
|
||||||
so that they are easier to sort:
|
|
||||||
|
|
||||||
- The logging now talks about "access table", instead of using three
|
|
||||||
different expressions "access table", "access map" and "SMTPD access
|
|
||||||
map" for the same thing.
|
|
||||||
|
|
||||||
- "non-SMTP command" is now logged BEFORE the client name/address
|
|
||||||
and the offending client input, instead of at the end.
|
|
||||||
|
|
||||||
Major change with snapshot 20050427+DSN
|
|
||||||
=======================================
|
|
||||||
|
|
||||||
This is experimental DSN support added to snapshot 20050427. The
|
|
||||||
code is not for production purposes; it is not fully tested, some
|
|
||||||
names and interfaces are still rough around the edges, and it does
|
|
||||||
not update the oqmgr so you have to use qmgr instead. Some
|
|
||||||
implementation notes and open issues are described in the
|
|
||||||
DSN_SUPPORT_README file (top-level directory).
|
|
||||||
|
|
||||||
Incompatibility with snapshot 20050329
|
|
||||||
======================================
|
|
||||||
|
|
||||||
If you use TLS, you need to execute "postfix reload" because the
|
|
||||||
TLS manager protocol has changed.
|
|
||||||
|
|
||||||
Incompatibility with snapshot 20050328
|
|
||||||
======================================
|
|
||||||
|
|
||||||
The logging format has changed. Postfix delivery agents now log the
|
|
||||||
RFC 3463 enhanced status code as "dsn=x.y.z" where y and z can be
|
|
||||||
up to three digits each. See the file pfloggsum-dsn-patch for an
|
|
||||||
update to the pfloggsum script.
|
|
||||||
|
|
||||||
After you upgrade from Postfix 2.2 or 2.3 you need to execute
|
|
||||||
"postfix reload", otherwise you will keep running the old Postfix
|
|
||||||
queue manager, which gives no special treatment to the enhanced
|
|
||||||
status codes that it receives from Postfix delivery agents.
|
|
||||||
|
|
||||||
Major changes with snapshot 20050328
|
|
||||||
====================================
|
|
||||||
|
|
||||||
This release introduces support for RFC 3463 enhanced status codes.
|
|
||||||
For example, status code 5.1.1 means "recipient unknown". Postfix
|
|
||||||
recognizes enhanced status codes in remote server replies, generates
|
|
||||||
enhanced status codes while handling email, and reports enhanced
|
|
||||||
status codes in non-delivery notifications. This improves the user
|
|
||||||
interaction with mail clients that hide the text of error messages
|
|
||||||
from users.
|
|
||||||
|
|
||||||
You can, but don't have to, specify RFC 3463 enhanced status codes
|
|
||||||
in the output from commands that receive mail from a pipe. If a
|
|
||||||
command terminates with non-zero exit status, and an enhanced status
|
|
||||||
code is present at the beginning of the command output, then that
|
|
||||||
status code takes precedence over the non-zero exit status.
|
|
||||||
|
|
||||||
You can, but don't have to, specify RFC 3463 enhanced status codes
|
|
||||||
in Postfix access maps, header/body_checks REJECT actions, or in
|
|
||||||
RBL replies. For example:
|
|
||||||
|
|
||||||
REJECT 5.7.1 You can't go here from there
|
|
||||||
|
|
||||||
The status 5.7.1 means "no authorization, message refused", and is
|
|
||||||
the default for access maps, header/body_checks REJECT actions, and
|
|
||||||
for RBL replies.
|
|
||||||
|
|
||||||
If you specify your own enhanced status code, the Postfix SMTP
|
|
||||||
server will automatically change a leading '5' digit (hard error)
|
|
||||||
into '4' where appropriate. This is needed, for example, with
|
|
||||||
soft_bounce=yes.
|
|
1
postfix/README_FILES/RELEASE_NOTES
Symbolic link
1
postfix/README_FILES/RELEASE_NOTES
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../RELEASE_NOTES
|
@ -71,13 +71,14 @@ no need to link extra libraries into Postfix.
|
|||||||
To generate the necessary Makefiles, execute the following in the Postfix top-
|
To generate the necessary Makefiles, execute the following in the Postfix top-
|
||||||
level directory:
|
level directory:
|
||||||
|
|
||||||
% make makefiles CCARGS='-DUSE_SASL_AUTH -DDEF_SASL_SERVER=\"dovecot\"'
|
% make makefiles CCARGS='-DUSE_SASL_AUTH -
|
||||||
|
DDEF_SASL_SERVER_TYPE=\"dovecot\"'
|
||||||
|
|
||||||
After this, proceed with "make" as described in the INSTALL document.
|
After this, proceed with "make" as described in the INSTALL document.
|
||||||
|
|
||||||
Notes:
|
Notes:
|
||||||
|
|
||||||
* The "-DDEF_SASL_SERVER" stuff is not necessary; it just makes Postfix
|
* The "-DDEF_SASL_SERVER_TYPE" stuff is not necessary; it just makes Postfix
|
||||||
configuration a little more convenient because you don't have to specify
|
configuration a little more convenient because you don't have to specify
|
||||||
the SASL plug-in type in the Postfix main.cf file.
|
the SASL plug-in type in the Postfix main.cf file.
|
||||||
|
|
||||||
|
@ -323,8 +323,8 @@ port<>25 and OE (5.01 Mac on all ports).
|
|||||||
|
|
||||||
It is strictly discouraged to use this mode from main.cf. If you want to
|
It is strictly discouraged to use this mode from main.cf. If you want to
|
||||||
support this service, enable a special port in master.cf and specify "-
|
support this service, enable a special port in master.cf and specify "-
|
||||||
o smtpd_tls_wrappermode = yes" as an smtpd(8) command line option. Port 465
|
o smtpd_tls_wrappermode=yes" (note: no space around the "=") as an smtpd(8)
|
||||||
(smtps) was once chosen for this feature.
|
command line option. Port 465 (smtps) was once chosen for this feature.
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
|
|
||||||
@ -426,6 +426,17 @@ Example:
|
|||||||
/etc/postfix/main.cf:
|
/etc/postfix/main.cf:
|
||||||
smtpd_tls_session_cache_timeout = 3600s
|
smtpd_tls_session_cache_timeout = 3600s
|
||||||
|
|
||||||
|
When the Postfix SMTP server does not save TLS sessions to an external cache
|
||||||
|
database, client-side session caching is unlikely to be useful. To prevent such
|
||||||
|
wastage, the Postfix SMTP server can be configured to not issue TLS session
|
||||||
|
ids. By default the Postfix SMTP server always issues TLS session ids. This
|
||||||
|
works around known interoperability issues with some MUAs, and prevents
|
||||||
|
possible interoperability issues with other MTAs.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
smtpd_tls_always_issue_session_ids = no
|
||||||
|
|
||||||
SSeerrvveerr aacccceessss ccoonnttrrooll
|
SSeerrvveerr aacccceessss ccoonnttrrooll
|
||||||
|
|
||||||
Postfix TLS support introduces three additional features for Postfix SMTP
|
Postfix TLS support introduces three additional features for Postfix SMTP
|
||||||
@ -1421,15 +1432,18 @@ perfect match between the server hostname and the server certificate, there is
|
|||||||
no guarantee that Postfix is connected to the right server. To avoid this
|
no guarantee that Postfix is connected to the right server. To avoid this
|
||||||
loophole, take all of the following steps:
|
loophole, take all of the following steps:
|
||||||
|
|
||||||
1. Use a dedicated transport for all secure-channel deliveries.
|
1. Use a dedicated message delivery transport (for example, "securetls") as
|
||||||
|
illustrated below.
|
||||||
|
|
||||||
2. Eliminate MX lookups. Specify local transport(5) table entries for
|
2. Eliminate MX lookups. Specify local transport(5) table entries for
|
||||||
sensitive domains with explicit smtp:[mailhost] or smtp:[mailhost]:port
|
sensitive domains with explicit securetls:[mailhost] or securetls:
|
||||||
destinations (you can assure security of this table unlike DNS); in the
|
[mailhost]:port destinations (you can assure security of this table unlike
|
||||||
smtp_tls_per_site table, specify the value "MUST" for the key [mailhost] or
|
DNS). This prevents false hostname information in DNS MX records from
|
||||||
smtp:[mailhost]:port. This prevents false hostname information in DNS MX
|
changing Postfix's notion of the server hostname that is used for TLS
|
||||||
records from changing Postfix's notion of the server hostname that is used
|
policy lookup and server certificate verification. The "securetls"
|
||||||
for TLS policy lookup and server certificate verification.
|
transport is configured to enforce TLS with peername verification, and to
|
||||||
|
disable the SMTP connection cache which could interfere with enforcement of
|
||||||
|
smtp_tls_per_site policies.
|
||||||
|
|
||||||
3. Disallow CNAME hostname overrides. In main.cf, specify
|
3. Disallow CNAME hostname overrides. In main.cf, specify
|
||||||
"smtp_cname_overrides_servername = no". This prevents false hostname
|
"smtp_cname_overrides_servername = no". This prevents false hostname
|
||||||
@ -1459,8 +1473,6 @@ the need for per-site table entries for secure-channel destinations.
|
|||||||
|
|
||||||
/etc/postfix/master.cf:
|
/etc/postfix/master.cf:
|
||||||
securetls unix - - n - 100 smtp
|
securetls unix - - n - 100 smtp
|
||||||
-o smtp_connection_cache_on_demand=no
|
|
||||||
-o smtp_connection_cache_destinations=
|
|
||||||
-o smtp_enforce_tls=yes
|
-o smtp_enforce_tls=yes
|
||||||
-o smtp_tls_enforce_peername=yes
|
-o smtp_tls_enforce_peername=yes
|
||||||
|
|
||||||
|
@ -353,6 +353,7 @@ $html_directory/postconf.1.html:f:root:-:644
|
|||||||
$html_directory/postconf.5.html:f:root:-:644
|
$html_directory/postconf.5.html:f:root:-:644
|
||||||
$html_directory/postdrop.1.html:f:root:-:644
|
$html_directory/postdrop.1.html:f:root:-:644
|
||||||
$html_directory/postfix-logo.jpg:f:root:-:644
|
$html_directory/postfix-logo.jpg:f:root:-:644
|
||||||
|
$html_directory/postfix-manuals.html:f:root:-:644
|
||||||
$html_directory/postfix.1.html:f:root:-:644
|
$html_directory/postfix.1.html:f:root:-:644
|
||||||
$html_directory/postkick.1.html:f:root:-:644
|
$html_directory/postkick.1.html:f:root:-:644
|
||||||
$html_directory/postlock.1.html:f:root:-:644
|
$html_directory/postlock.1.html:f:root:-:644
|
||||||
|
@ -112,7 +112,7 @@ Berkeley DB versions</a></h2>
|
|||||||
Normally, Postfix builds with the default DB version that ships
|
Normally, Postfix builds with the default DB version that ships
|
||||||
with the system. </p>
|
with the system. </p>
|
||||||
|
|
||||||
<p> To build Postfix on BSD systems with a specific DB version,
|
<p> To build Postfix on BSD systems with a non-default DB version,
|
||||||
use a variant of the following commands: </p>
|
use a variant of the following commands: </p>
|
||||||
|
|
||||||
<blockquote>
|
<blockquote>
|
||||||
|
@ -634,12 +634,10 @@ after-filter smtpd process, so that filtered mail is logged with
|
|||||||
the real client name IP address. See <a href="smtp.8.html">smtp(8)</a> and <a href="XFORWARD_README.html">XFORWARD_README</a>
|
the real client name IP address. See <a href="smtp.8.html">smtp(8)</a> and <a href="XFORWARD_README.html">XFORWARD_README</a>
|
||||||
for more information. </p>
|
for more information. </p>
|
||||||
|
|
||||||
<li> <p> With "-o <a href="postconf.5.html#disable_mime_output_conversion">disable_mime_output_conversion</a>=yes", the scan
|
<li> <p> The "-o <a href="postconf.5.html#disable_mime_output_conversion">disable_mime_output_conversion</a>=yes" is a workaround
|
||||||
delivery agent will not convert 8BITMIME mail to quoted-printable
|
that prevents the breaking of domainkeys and other digital signatures.
|
||||||
form while delivering to the content filter, as that would invalidate
|
This is needed because some SMTP-based content filters don't announce
|
||||||
domainkeys and other digital signatures. This workaround is needed
|
8BITMIME support, even though they can handle it just fine. </p>
|
||||||
because some SMTP-based content filters don't announce 8BITMIME
|
|
||||||
support, even though they can handle it just fine. </p>
|
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
@ -21,11 +21,20 @@
|
|||||||
|
|
||||||
<p> Warning: if you can't compile Postfix because the file "db.h"
|
<p> Warning: if you can't compile Postfix because the file "db.h"
|
||||||
isn't found, then you MUST install the Berkeley DB development
|
isn't found, then you MUST install the Berkeley DB development
|
||||||
package (package name: db???-devel-???) that comes with your Linux
|
package (name: db???-devel-???) that matches your system library.
|
||||||
system. Only that package contains the files that correspond to the
|
You can find out what is installed with the rpm command. For example:
|
||||||
Berkeley DB version that is used by the system library routines.
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
<blockquote>
|
||||||
|
<pre>
|
||||||
|
$ <b>rpm -qf /usr/lib/libdb.so</b>
|
||||||
|
db4-4.3.29-2
|
||||||
|
</pre>
|
||||||
|
</blockquote>
|
||||||
|
|
||||||
|
<p> This means that you need to install db4-devel-4.3.29-2 (on
|
||||||
|
some systems, specify <tt>/lib/libdb.so</tt> in the rpm query). </p>
|
||||||
|
|
||||||
<p> DO NOT download some Berkeley DB version from the network.
|
<p> DO NOT download some Berkeley DB version from the network.
|
||||||
Every Postfix program will dump core when it is built with a different
|
Every Postfix program will dump core when it is built with a different
|
||||||
Berkeley DB version than the version that is used by the system
|
Berkeley DB version than the version that is used by the system
|
||||||
|
@ -228,7 +228,7 @@ library from Sendmail source code instead: </p>
|
|||||||
<blockquote>
|
<blockquote>
|
||||||
<pre>
|
<pre>
|
||||||
$ <b>gzcat sendmail-<i>x.y.z</i>.tar.gz | tar xf -</b>
|
$ <b>gzcat sendmail-<i>x.y.z</i>.tar.gz | tar xf -</b>
|
||||||
$ <b>cd sendmail-<i>x.y.z</i></b>
|
$ <b>cd sendmail-<i>x.y.z</i>/libmilter</b>
|
||||||
$ <b>make</b>
|
$ <b>make</b>
|
||||||
[...<i>lots of output omitted</i>...]
|
[...<i>lots of output omitted</i>...]
|
||||||
</pre>
|
</pre>
|
||||||
@ -521,6 +521,9 @@ href="#workarounds">workarounds</a> section below for solutions.
|
|||||||
<tr> <td> j </td> <td> Always </td> <td> value of <a href="postconf.5.html#myhostname">myhostname</a> </td>
|
<tr> <td> j </td> <td> Always </td> <td> value of <a href="postconf.5.html#myhostname">myhostname</a> </td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
|
<tr> <td> _ </td> <td> Always </td> <td> The validated client name
|
||||||
|
and address </td> </tr>
|
||||||
|
|
||||||
<tr> <td> {auth_authen} </td> <td> MAIL, DATA, EOM </td> <td> SASL
|
<tr> <td> {auth_authen} </td> <td> MAIL, DATA, EOM </td> <td> SASL
|
||||||
login name </td> </tr>
|
login name </td> </tr>
|
||||||
|
|
||||||
@ -613,9 +616,9 @@ TO </td> </tr>
|
|||||||
<h2><a name="workarounds">Workarounds</a></h2>
|
<h2><a name="workarounds">Workarounds</a></h2>
|
||||||
|
|
||||||
<p> Content filters may break domain key etc. signatures. If you
|
<p> Content filters may break domain key etc. signatures. If you
|
||||||
use an SMTP-based filter as described in <a href="FILTER_README.html">FILTER_README</a>, then you
|
use an SMTP-based content filter, then you should add a line to
|
||||||
should add a line to <a href="master.5.html">master.cf</a> with "<a href="postconf.5.html#disable_mime_output_conversion">disable_mime_output_conversion</a>
|
<a href="master.5.html">master.cf</a> with "-o <a href="postconf.5.html#disable_mime_output_conversion">disable_mime_output_conversion</a>=yes" (note: no
|
||||||
= yes", as described in the <a
|
spaces around the "="), as described in the <a
|
||||||
href="FILTER_README.html#advanced_filter">advanced content filter</a>
|
href="FILTER_README.html#advanced_filter">advanced content filter</a>
|
||||||
example. </p>
|
example. </p>
|
||||||
|
|
||||||
|
@ -127,7 +127,7 @@ in the Postfix top-level directory: </p>
|
|||||||
|
|
||||||
<blockquote>
|
<blockquote>
|
||||||
<pre>
|
<pre>
|
||||||
% make makefiles CCARGS='-DUSE_SASL_AUTH -DDEF_SASL_SERVER=\"dovecot\"'
|
% make makefiles CCARGS='-DUSE_SASL_AUTH -DDEF_SASL_SERVER_TYPE=\"dovecot\"'
|
||||||
</pre>
|
</pre>
|
||||||
</blockquote>
|
</blockquote>
|
||||||
|
|
||||||
@ -138,7 +138,7 @@ in the Postfix top-level directory: </p>
|
|||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
|
|
||||||
<li> <p> The "-DDEF_SASL_SERVER" stuff is not necessary; it just
|
<li> <p> The "-DDEF_SASL_SERVER_TYPE" stuff is not necessary; it just
|
||||||
makes Postfix configuration a little more convenient because you
|
makes Postfix configuration a little more convenient because you
|
||||||
don't have to specify the SASL plug-in type in the Postfix <a href="postconf.5.html">main.cf</a>
|
don't have to specify the SASL plug-in type in the Postfix <a href="postconf.5.html">main.cf</a>
|
||||||
file. </p>
|
file. </p>
|
||||||
|
@ -490,8 +490,9 @@ and OE (5.01 Mac on all ports). </p>
|
|||||||
|
|
||||||
<p> It is strictly discouraged to use this mode from <a href="postconf.5.html">main.cf</a>. If
|
<p> It is strictly discouraged to use this mode from <a href="postconf.5.html">main.cf</a>. If
|
||||||
you want to support this service, enable a special port in <a href="master.5.html">master.cf</a>
|
you want to support this service, enable a special port in <a href="master.5.html">master.cf</a>
|
||||||
and specify "-o <a href="postconf.5.html#smtpd_tls_wrappermode">smtpd_tls_wrappermode</a> = yes" as an <a href="smtpd.8.html">smtpd(8)</a> command
|
and specify "-o <a href="postconf.5.html#smtpd_tls_wrappermode">smtpd_tls_wrappermode</a>=yes" (note: no space around
|
||||||
line option. Port 465 (smtps) was once chosen for this feature.
|
the "=") as an <a href="smtpd.8.html">smtpd(8)</a> command line option. Port 465 (smtps) was
|
||||||
|
once chosen for this feature.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p> Example: </p>
|
<p> Example: </p>
|
||||||
@ -631,6 +632,22 @@ recommends a maximum of 24 hours. </p>
|
|||||||
</pre>
|
</pre>
|
||||||
</blockquote>
|
</blockquote>
|
||||||
|
|
||||||
|
<p> When the Postfix SMTP server does not save TLS sessions to an
|
||||||
|
external cache database, client-side session caching is unlikely
|
||||||
|
to be useful. To prevent such wastage, the Postfix SMTP server can
|
||||||
|
be configured to not issue TLS session ids. By default the Postfix
|
||||||
|
SMTP server always issues TLS session ids. This works around known
|
||||||
|
interoperability issues with some MUAs, and prevents possible
|
||||||
|
interoperability issues with other MTAs. </p>
|
||||||
|
|
||||||
|
<p> Example: </p>
|
||||||
|
|
||||||
|
<blockquote>
|
||||||
|
<pre>
|
||||||
|
<a href="postconf.5.html#smtpd_tls_always_issue_session_ids">smtpd_tls_always_issue_session_ids</a> = no
|
||||||
|
</pre>
|
||||||
|
</blockquote>
|
||||||
|
|
||||||
<h3><a name="server_access">Server access control</a> </h3>
|
<h3><a name="server_access">Server access control</a> </h3>
|
||||||
|
|
||||||
<p> Postfix TLS support introduces three additional features for
|
<p> Postfix TLS support introduces three additional features for
|
||||||
@ -1822,10 +1839,10 @@ the following information: </p>
|
|||||||
<dl>
|
<dl>
|
||||||
|
|
||||||
<dt> remote SMTP server hostname </dt> <dd> This is simply the DNS
|
<dt> remote SMTP server hostname </dt> <dd> This is simply the DNS
|
||||||
name of the server that the Postfix SMTP client connects to; this name
|
name of the server that the Postfix SMTP client connects to; this
|
||||||
may be obtained from other DNS lookups, such as MX lookups or CNAME
|
name may be obtained from other DNS lookups, such as MX lookups or
|
||||||
lookups. Use of the hostname lookup key is discouraged; always use the
|
CNAME lookups. Use of the hostname lookup key is discouraged; always
|
||||||
next-hop destination instead. </dd>
|
use the next-hop destination instead. </dd>
|
||||||
|
|
||||||
<dt> next-hop destination </dt> <dd> This is normally the domain portion
|
<dt> next-hop destination </dt> <dd> This is normally the domain portion
|
||||||
of the recipient address, but it may be overridden by information from
|
of the recipient address, but it may be overridden by information from
|
||||||
@ -1924,17 +1941,19 @@ steps: </p>
|
|||||||
|
|
||||||
<ol>
|
<ol>
|
||||||
|
|
||||||
<li> <p> Use a dedicated transport for all secure-channel deliveries. </p>
|
<li> <p> Use a dedicated message delivery transport (for example,
|
||||||
|
"securetls") as illustrated below. </p>
|
||||||
|
|
||||||
<li> <p> Eliminate MX lookups. Specify local <a href="transport.5.html">transport(5)</a> table
|
<li> <p> Eliminate MX lookups. Specify local <a href="transport.5.html">transport(5)</a> table
|
||||||
entries for sensitive domains with explicit <a href="smtp.8.html">smtp</a>:[<i>mailhost</i>]
|
entries for sensitive domains with explicit securetls:[<i>mailhost</i>]
|
||||||
or <a href="smtp.8.html">smtp</a>:[<i>mailhost</i>]:<i>port</i> destinations (you can assure
|
or securetls:[<i>mailhost</i>]:<i>port</i> destinations (you can
|
||||||
security of this table unlike DNS); in the <a href="postconf.5.html#smtp_tls_per_site">smtp_tls_per_site</a>
|
assure security of this table unlike DNS). This prevents false
|
||||||
table, specify the value "MUST" for the key [<i>mailhost</i>] or
|
hostname information in DNS MX records from changing Postfix's
|
||||||
<a href="smtp.8.html">smtp</a>:[<i>mailhost</i>]:<i>port</i>. This prevents false hostname
|
notion of the server hostname that is used for TLS policy lookup
|
||||||
information in DNS MX records from changing Postfix's notion of the
|
and server certificate verification. The "securetls" transport is
|
||||||
server hostname that is used for TLS policy lookup and server certificate
|
configured to enforce TLS with peername verification, and to disable
|
||||||
verification. </p>
|
the SMTP connection cache which could interfere with enforcement
|
||||||
|
of <a href="postconf.5.html#smtp_tls_per_site">smtp_tls_per_site</a> policies. </p>
|
||||||
|
|
||||||
<li> <p> Disallow CNAME hostname overrides. In <a href="postconf.5.html">main.cf</a>, specify
|
<li> <p> Disallow CNAME hostname overrides. In <a href="postconf.5.html">main.cf</a>, specify
|
||||||
"<a href="postconf.5.html#smtp_cname_overrides_servername">smtp_cname_overrides_servername</a> = no". This prevents false hostname
|
"<a href="postconf.5.html#smtp_cname_overrides_servername">smtp_cname_overrides_servername</a> = no". This prevents false hostname
|
||||||
@ -1971,8 +1990,6 @@ destinations. </p>
|
|||||||
|
|
||||||
/etc/postfix/<a href="master.5.html">master.cf</a>:
|
/etc/postfix/<a href="master.5.html">master.cf</a>:
|
||||||
securetls unix - - n - 100 smtp
|
securetls unix - - n - 100 smtp
|
||||||
-o <a href="postconf.5.html#smtp_connection_cache_on_demand">smtp_connection_cache_on_demand</a>=no
|
|
||||||
-o <a href="postconf.5.html#smtp_connection_cache_destinations">smtp_connection_cache_destinations</a>=
|
|
||||||
-o <a href="postconf.5.html#smtp_enforce_tls">smtp_enforce_tls</a>=yes
|
-o <a href="postconf.5.html#smtp_enforce_tls">smtp_enforce_tls</a>=yes
|
||||||
-o <a href="postconf.5.html#smtp_tls_enforce_peername">smtp_tls_enforce_peername</a>=yes
|
-o <a href="postconf.5.html#smtp_tls_enforce_peername">smtp_tls_enforce_peername</a>=yes
|
||||||
</pre>
|
</pre>
|
||||||
|
@ -3556,17 +3556,6 @@ Enable SASL authentication in the Postfix LMTP client.
|
|||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
|
||||||
</DD>
|
|
||||||
|
|
||||||
<DT><b><a name="lmtp_sasl_auth_enforce">lmtp_sasl_auth_enforce</a>
|
|
||||||
(default: yes)</b></DT><DD>
|
|
||||||
|
|
||||||
<p> The LMTP-specific version of the <a href="postconf.5.html#smtp_sasl_auth_enforce">smtp_sasl_auth_enforce</a>
|
|
||||||
configuration parameter. See there for details. </p>
|
|
||||||
|
|
||||||
<p> This feature is available in Postfix 2.3 and later. </p>
|
|
||||||
|
|
||||||
|
|
||||||
</DD>
|
</DD>
|
||||||
|
|
||||||
<DT><b><a name="lmtp_sasl_mechanism_filter">lmtp_sasl_mechanism_filter</a>
|
<DT><b><a name="lmtp_sasl_mechanism_filter">lmtp_sasl_mechanism_filter</a>
|
||||||
@ -7590,19 +7579,6 @@ Example:
|
|||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
|
|
||||||
</DD>
|
|
||||||
|
|
||||||
<DT><b><a name="smtp_sasl_auth_enforce">smtp_sasl_auth_enforce</a>
|
|
||||||
(default: yes)</b></DT><DD>
|
|
||||||
|
|
||||||
<p> If sender-dependent SASL passwords are turned off, defer mail
|
|
||||||
delivery when an SMTP server does not support SASL authentication,
|
|
||||||
while <a href="postconf.5.html#smtp_sasl_password_maps">smtp_sasl_password_maps</a> contains SASL login/password information
|
|
||||||
for that server. </p>
|
|
||||||
|
|
||||||
<p> This feature is available in Postfix 2.3 and later. </p>
|
|
||||||
|
|
||||||
|
|
||||||
</DD>
|
</DD>
|
||||||
|
|
||||||
<DT><b><a name="smtp_sasl_mechanism_filter">smtp_sasl_mechanism_filter</a>
|
<DT><b><a name="smtp_sasl_mechanism_filter">smtp_sasl_mechanism_filter</a>
|
||||||
@ -9819,7 +9795,7 @@ null sender address.
|
|||||||
<DT><b><a name="smtpd_peername_lookup">smtpd_peername_lookup</a>
|
<DT><b><a name="smtpd_peername_lookup">smtpd_peername_lookup</a>
|
||||||
(default: yes)</b></DT><DD>
|
(default: yes)</b></DT><DD>
|
||||||
|
|
||||||
<p> Attempt to look up the Postfix SMTP client hostname, and verify that
|
<p> Attempt to look up the remote SMTP client hostname, and verify that
|
||||||
the name matches the client IP address. A client name is set to
|
the name matches the client IP address. A client name is set to
|
||||||
"unknown" when it cannot be looked up or verified, or when name
|
"unknown" when it cannot be looked up or verified, or when name
|
||||||
lookup is disabled. Turning off name lookup reduces delays due to
|
lookup is disabled. Turning off name lookup reduces delays due to
|
||||||
@ -10780,6 +10756,36 @@ feature is therefore not recommended. </p>
|
|||||||
<p> This feature is available in Postfix 2.2 and later. </p>
|
<p> This feature is available in Postfix 2.2 and later. </p>
|
||||||
|
|
||||||
|
|
||||||
|
</DD>
|
||||||
|
|
||||||
|
<DT><b><a name="smtpd_tls_always_issue_session_ids">smtpd_tls_always_issue_session_ids</a>
|
||||||
|
(default: yes)</b></DT><DD>
|
||||||
|
|
||||||
|
<p> Force the Postfix SMTP server to issue a TLS session id, even
|
||||||
|
when TLS session caching is turned off (<a href="postconf.5.html#smtpd_tls_session_cache_database">smtpd_tls_session_cache_database</a>
|
||||||
|
is empty). This behavior is compatible with Postfix < 2.3. </p>
|
||||||
|
|
||||||
|
<p> With Postfix 2.3 and later the Postfix SMTP server can disable
|
||||||
|
session id generation when TLS session caching is turned off. This
|
||||||
|
keeps clients from caching sessions that almost certainly cannot
|
||||||
|
be re-used. </p>
|
||||||
|
|
||||||
|
<p> By default, the Postfix SMTP server always generates TLS session
|
||||||
|
ids. This works around a known defect in mail client applications
|
||||||
|
such as MS Outlook, and may also prevent interoperability issues
|
||||||
|
with other MTAs. </p>
|
||||||
|
|
||||||
|
<p> Example: </p>
|
||||||
|
|
||||||
|
<blockquote>
|
||||||
|
<pre>
|
||||||
|
<a href="postconf.5.html#smtpd_tls_always_issue_session_ids">smtpd_tls_always_issue_session_ids</a> = no
|
||||||
|
</pre>
|
||||||
|
</blockquote>
|
||||||
|
|
||||||
|
<p> This feature is available in Postfix 2.3 and later. </p>
|
||||||
|
|
||||||
|
|
||||||
</DD>
|
</DD>
|
||||||
|
|
||||||
<DT><b><a name="smtpd_tls_ask_ccert">smtpd_tls_ask_ccert</a>
|
<DT><b><a name="smtpd_tls_ask_ccert">smtpd_tls_ask_ccert</a>
|
||||||
|
@ -113,9 +113,9 @@ the following convention: </p>
|
|||||||
|
|
||||||
<li> <a href="bounce.5.html">bounce(5)</a>, Postfix bounce message templates
|
<li> <a href="bounce.5.html">bounce(5)</a>, Postfix bounce message templates
|
||||||
|
|
||||||
<li> <a href="master.5.html">master(5)</a>, Postfix master.cf file syntax
|
<li> <a href="master.5.html">master(5)</a>, Postfix <a href="master.5.html">master.cf</a> file syntax
|
||||||
|
|
||||||
<li> <a href="postconf.5.html">postconf(5)</a>, Postfix main.cf file syntax
|
<li> <a href="postconf.5.html">postconf(5)</a>, Postfix <a href="postconf.5.html">main.cf</a> file syntax
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
@ -62,7 +62,7 @@ POSTFIX(1) POSTFIX(1)
|
|||||||
<b>postfix-files</b> file.
|
<b>postfix-files</b> file.
|
||||||
|
|
||||||
Specify <i>name</i>=<i>value</i> to override and update specific
|
Specify <i>name</i>=<i>value</i> to override and update specific
|
||||||
main.cf configuration parameters. Use this, for
|
<a href="postconf.5.html">main.cf</a> configuration parameters. Use this, for
|
||||||
example, to change the <b><a href="postconf.5.html#mail_owner">mail_owner</a></b> or <b><a href="postconf.5.html#setgid_group">setgid_group</a></b>
|
example, to change the <b><a href="postconf.5.html#mail_owner">mail_owner</a></b> or <b><a href="postconf.5.html#setgid_group">setgid_group</a></b>
|
||||||
setting for an already installed Postfix system.
|
setting for an already installed Postfix system.
|
||||||
|
|
||||||
@ -71,13 +71,13 @@ POSTFIX(1) POSTFIX(1)
|
|||||||
<b>fix/post-install set-permissions</b>".
|
<b>fix/post-install set-permissions</b>".
|
||||||
|
|
||||||
<b>upgrade-configuration [</b><i>name</i>=<i>value ...</i><b>]</b>
|
<b>upgrade-configuration [</b><i>name</i>=<i>value ...</i><b>]</b>
|
||||||
Update the <b>main.cf</b> and <b>master.cf</b> files with infor-
|
Update the <a href="postconf.5.html"><b>main.cf</b></a> and <a href="master.5.html"><b>master.cf</b></a> files with infor-
|
||||||
mation that Postfix needs in order to run: add or
|
mation that Postfix needs in order to run: add or
|
||||||
update services, and add or update configuration
|
update services, and add or update configuration
|
||||||
parameter settings.
|
parameter settings.
|
||||||
|
|
||||||
Specify <i>name</i>=<i>value</i> to override and update specific
|
Specify <i>name</i>=<i>value</i> to override and update specific
|
||||||
main.cf configuration parameters.
|
<a href="postconf.5.html">main.cf</a> configuration parameters.
|
||||||
|
|
||||||
This feature is available in Postfix 2.1 and later.
|
This feature is available in Postfix 2.1 and later.
|
||||||
With Postfix 2.0 and earlier, use "<b>/etc/post-</b>
|
With Postfix 2.0 and earlier, use "<b>/etc/post-</b>
|
||||||
@ -86,7 +86,7 @@ POSTFIX(1) POSTFIX(1)
|
|||||||
The following options are implemented:
|
The following options are implemented:
|
||||||
|
|
||||||
<b>-c</b> <i>config</i><b>_</b><i>dir</i>
|
<b>-c</b> <i>config</i><b>_</b><i>dir</i>
|
||||||
Read the <b>main.cf</b> and <b>master.cf</b> configuration files
|
Read the <a href="postconf.5.html"><b>main.cf</b></a> and <a href="master.5.html"><b>master.cf</b></a> configuration files
|
||||||
in the named directory instead of the default con-
|
in the named directory instead of the default con-
|
||||||
figuration directory. Use this to distinguish
|
figuration directory. Use this to distinguish
|
||||||
between multiple Postfix instances on the same
|
between multiple Postfix instances on the same
|
||||||
@ -118,7 +118,7 @@ POSTFIX(1) POSTFIX(1)
|
|||||||
present.
|
present.
|
||||||
|
|
||||||
<b>CONFIGURATION PARAMETERS</b>
|
<b>CONFIGURATION PARAMETERS</b>
|
||||||
The following <b>main.cf</b> configuration parameters are
|
The following <a href="postconf.5.html"><b>main.cf</b></a> configuration parameters are
|
||||||
exported as environment variables with the same names:
|
exported as environment variables with the same names:
|
||||||
|
|
||||||
<b><a href="postconf.5.html#command_directory">command_directory</a> (see 'postconf -d' output)</b>
|
<b><a href="postconf.5.html#command_directory">command_directory</a> (see 'postconf -d' output)</b>
|
||||||
@ -130,8 +130,8 @@ POSTFIX(1) POSTFIX(1)
|
|||||||
daemon programs.
|
daemon programs.
|
||||||
|
|
||||||
<b><a href="postconf.5.html#config_directory">config_directory</a> (see 'postconf -d' output)</b>
|
<b><a href="postconf.5.html#config_directory">config_directory</a> (see 'postconf -d' output)</b>
|
||||||
The default location of the Postfix main.cf and
|
The default location of the Postfix <a href="postconf.5.html">main.cf</a> and
|
||||||
master.cf configuration files.
|
<a href="master.5.html">master.cf</a> configuration files.
|
||||||
|
|
||||||
<b><a href="postconf.5.html#queue_directory">queue_directory</a> (see 'postconf -d' output)</b>
|
<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-
|
||||||
@ -173,8 +173,8 @@ POSTFIX(1) POSTFIX(1)
|
|||||||
Other configuration parameters:
|
Other configuration parameters:
|
||||||
|
|
||||||
<b><a href="postconf.5.html#config_directory">config_directory</a> (see 'postconf -d' output)</b>
|
<b><a href="postconf.5.html#config_directory">config_directory</a> (see 'postconf -d' output)</b>
|
||||||
The default location of the Postfix main.cf and
|
The default location of the Postfix <a href="postconf.5.html">main.cf</a> and
|
||||||
master.cf configuration files.
|
<a href="master.5.html">master.cf</a> configuration files.
|
||||||
|
|
||||||
<b><a href="postconf.5.html#import_environment">import_environment</a> (see 'postconf -d' output)</b>
|
<b><a href="postconf.5.html#import_environment">import_environment</a> (see 'postconf -d' output)</b>
|
||||||
The list of environment parameters that a Postfix
|
The list of environment parameters that a Postfix
|
||||||
@ -190,8 +190,8 @@ POSTFIX(1) POSTFIX(1)
|
|||||||
becomes, for example, "postfix/smtpd".
|
becomes, for example, "postfix/smtpd".
|
||||||
|
|
||||||
<b>FILES</b>
|
<b>FILES</b>
|
||||||
/etc/postfix/main.cf, Postfix configuration parameters
|
/etc/postfix/<a href="postconf.5.html">main.cf</a>, Postfix configuration parameters
|
||||||
/etc/postfix/master.cf, Postfix daemon processes
|
/etc/postfix/<a href="master.5.html">master.cf</a>, Postfix daemon processes
|
||||||
/etc/postfix/postfix-files, file/directory permissions
|
/etc/postfix/postfix-files, file/directory permissions
|
||||||
/etc/postfix/postfix-script, administrative commands
|
/etc/postfix/postfix-script, administrative commands
|
||||||
/etc/postfix/post-install, post-installation configuration
|
/etc/postfix/post-install, post-installation configuration
|
||||||
@ -214,8 +214,8 @@ POSTFIX(1) POSTFIX(1)
|
|||||||
|
|
||||||
Postfix configuration:
|
Postfix configuration:
|
||||||
<a href="bounce.5.html">bounce(5)</a>, Postfix bounce message templates
|
<a href="bounce.5.html">bounce(5)</a>, Postfix bounce message templates
|
||||||
<a href="master.5.html">master(5)</a>, Postfix master.cf file syntax
|
<a href="master.5.html">master(5)</a>, Postfix <a href="master.5.html">master.cf</a> file syntax
|
||||||
<a href="postconf.5.html">postconf(5)</a>, Postfix main.cf file syntax
|
<a href="postconf.5.html">postconf(5)</a>, Postfix <a href="postconf.5.html">main.cf</a> file syntax
|
||||||
|
|
||||||
Table-driven mechanisms:
|
Table-driven mechanisms:
|
||||||
<a href="access.5.html">access(5)</a>, Postfix SMTP access control table
|
<a href="access.5.html">access(5)</a>, Postfix SMTP access control table
|
||||||
@ -283,6 +283,14 @@ POSTFIX(1) POSTFIX(1)
|
|||||||
P.O. Box 704
|
P.O. Box 704
|
||||||
Yorktown Heights, NY 10598, USA
|
Yorktown Heights, NY 10598, USA
|
||||||
|
|
||||||
|
TLS support by:
|
||||||
|
Lutz Jaenicke
|
||||||
|
Brandenburg University of Technology
|
||||||
|
Cottbus, Germany
|
||||||
|
|
||||||
|
Victor Duchovni
|
||||||
|
Morgan Stanley
|
||||||
|
|
||||||
SASL support originally by:
|
SASL support originally by:
|
||||||
Till Franke
|
Till Franke
|
||||||
SuSE Rhein/Main AG
|
SuSE Rhein/Main AG
|
||||||
|
@ -30,7 +30,7 @@ POSTSUPER(1) POSTSUPER(1)
|
|||||||
Options:
|
Options:
|
||||||
|
|
||||||
<b>-c</b> <i>config</i><b>_</b><i>dir</i>
|
<b>-c</b> <i>config</i><b>_</b><i>dir</i>
|
||||||
The <b>main.cf</b> configuration file is in the named
|
The <a href="postconf.5.html"><b>main.cf</b></a> configuration file is in the named
|
||||||
directory instead of the default configuration
|
directory instead of the default configuration
|
||||||
directory. See also the MAIL_CONFIG environment
|
directory. See also the MAIL_CONFIG environment
|
||||||
setting below.
|
setting below.
|
||||||
@ -136,12 +136,32 @@ POSTSUPER(1) POSTSUPER(1)
|
|||||||
case.
|
case.
|
||||||
|
|
||||||
A requeued message is moved to the <b>maildrop</b> queue,
|
A requeued message is moved to the <b>maildrop</b> queue,
|
||||||
from where it is copied by the pickup daemon to a
|
from where it is copied by the <a href="pickup.8.html"><b>pickup</b>(8)</a> and
|
||||||
new file whose name is guaranteed to match the new
|
<a href="cleanup.8.html"><b>cleanup</b>(8)</a> daemons to a new queue file. In many
|
||||||
queue file inode number. The new queue file is sub-
|
respects its handling differs from that of a new
|
||||||
jected again to mail address rewriting and substi-
|
local submission.
|
||||||
tution. This is useful when rewriting rules or vir-
|
|
||||||
tual mappings have changed.
|
<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
|
||||||
|
content filter, this would produce incorrect
|
||||||
|
results with Milter applications that depend
|
||||||
|
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-
|
||||||
|
pings have changed.
|
||||||
|
|
||||||
|
The address rewriting context (local or
|
||||||
|
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
|
||||||
|
when <a href="postconf.5.html#content_filter">content_filter</a> settings have changed.
|
||||||
|
|
||||||
Warning: Postfix queue IDs are reused. There is a
|
Warning: Postfix queue IDs are reused. There is a
|
||||||
very small possibility that <a href="postsuper.1.html"><b>postsuper</b>(1)</a> requeues
|
very small possibility that <a href="postsuper.1.html"><b>postsuper</b>(1)</a> requeues
|
||||||
@ -180,21 +200,21 @@ POSTSUPER(1) POSTSUPER(1)
|
|||||||
|
|
||||||
<b>ENVIRONMENT</b>
|
<b>ENVIRONMENT</b>
|
||||||
MAIL_CONFIG
|
MAIL_CONFIG
|
||||||
Directory with the <b>main.cf</b> file.
|
Directory with the <a href="postconf.5.html"><b>main.cf</b></a> file.
|
||||||
|
|
||||||
<b>BUGS</b>
|
<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>maildrop</b> queue) cannot be placed "on hold".
|
||||||
|
|
||||||
<b>CONFIGURATION PARAMETERS</b>
|
<b>CONFIGURATION PARAMETERS</b>
|
||||||
The following <b>main.cf</b> 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
|
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.
|
ples.
|
||||||
|
|
||||||
<b><a href="postconf.5.html#config_directory">config_directory</a> (see 'postconf -d' output)</b>
|
<b><a href="postconf.5.html#config_directory">config_directory</a> (see 'postconf -d' output)</b>
|
||||||
The default location of the Postfix main.cf and
|
The default location of the Postfix <a href="postconf.5.html">main.cf</a> and
|
||||||
master.cf configuration files.
|
<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>
|
<b><a href="postconf.5.html#hash_queue_depth">hash_queue_depth</a> (1)</b>
|
||||||
The number of subdirectory levels for queue direc-
|
The number of subdirectory levels for queue direc-
|
||||||
|
@ -293,13 +293,6 @@ SMTP(8) SMTP(8)
|
|||||||
|
|
||||||
Available in Postfix version 2.3 and later:
|
Available in Postfix version 2.3 and later:
|
||||||
|
|
||||||
<b><a href="postconf.5.html#smtp_sasl_auth_enforce">smtp_sasl_auth_enforce</a> (yes)</b>
|
|
||||||
If sender-dependent SASL passwords are turned off,
|
|
||||||
defer mail delivery when an SMTP server does not
|
|
||||||
support SASL authentication, while <a href="postconf.5.html#smtp_sasl_password_maps">smtp_sasl_pass</a>-
|
|
||||||
<a href="postconf.5.html#smtp_sasl_password_maps">word_maps</a> contains SASL login/password information
|
|
||||||
for that server.
|
|
||||||
|
|
||||||
<b><a href="postconf.5.html#smtp_sender_dependent_authentication">smtp_sender_dependent_authentication</a> (no)</b>
|
<b><a href="postconf.5.html#smtp_sender_dependent_authentication">smtp_sender_dependent_authentication</a> (no)</b>
|
||||||
Enable sender-dependent authentication in the Post-
|
Enable sender-dependent authentication in the Post-
|
||||||
fix SMTP client; this is available only with SASL
|
fix SMTP client; this is available only with SASL
|
||||||
@ -387,6 +380,16 @@ SMTP(8) SMTP(8)
|
|||||||
offers STARTTLS, when TLS is not already enabled
|
offers STARTTLS, when TLS is not already enabled
|
||||||
for that server.
|
for that server.
|
||||||
|
|
||||||
|
<b><a href="postconf.5.html#smtp_tls_policy_maps">smtp_tls_policy_maps</a> (empty)</b>
|
||||||
|
Optional lookup tables with the Postfix SMTP client
|
||||||
|
TLS security policy by next-hop destination; when a
|
||||||
|
non-empty value is specified, this overrides the
|
||||||
|
obsolete <a href="postconf.5.html#smtp_tls_per_site">smtp_tls_per_site</a> parameter.
|
||||||
|
|
||||||
|
<b><a href="postconf.5.html#smtp_tls_mandatory_protocols">smtp_tls_mandatory_protocols</a> (SSLv3, TLSv1)</b>
|
||||||
|
List of TLS protocols that the Postfix SMTP client
|
||||||
|
will use with mandatory TLS encryption.
|
||||||
|
|
||||||
<b><a href="postconf.5.html#smtp_tls_scert_verifydepth">smtp_tls_scert_verifydepth</a> (5)</b>
|
<b><a href="postconf.5.html#smtp_tls_scert_verifydepth">smtp_tls_scert_verifydepth</a> (5)</b>
|
||||||
The verification depth for remote SMTP server cer-
|
The verification depth for remote SMTP server cer-
|
||||||
tificates.
|
tificates.
|
||||||
|
@ -130,6 +130,13 @@ SMTPD(8) SMTPD(8)
|
|||||||
Postpone the start of an SMTP mail transaction
|
Postpone the start of an SMTP mail transaction
|
||||||
until a valid RCPT TO command is received.
|
until a valid RCPT TO command is received.
|
||||||
|
|
||||||
|
Available in Postfix version 2.3 and later:
|
||||||
|
|
||||||
|
<b><a href="postconf.5.html#smtpd_tls_always_issue_session_ids">smtpd_tls_always_issue_session_ids</a> (yes)</b>
|
||||||
|
Force the Postfix SMTP server to issue a TLS ses-
|
||||||
|
sion id, even when TLS session caching is turned
|
||||||
|
off (<a href="postconf.5.html#smtpd_tls_session_cache_database">smtpd_tls_session_cache_database</a> is empty).
|
||||||
|
|
||||||
<b>ADDRESS REWRITING CONTROLS</b>
|
<b>ADDRESS REWRITING CONTROLS</b>
|
||||||
See the <a href="ADDRESS_REWRITING_README.html">ADDRESS_REWRITING_README</a> document for a detailed
|
See the <a href="ADDRESS_REWRITING_README.html">ADDRESS_REWRITING_README</a> document for a detailed
|
||||||
discussion of Postfix address rewriting.
|
discussion of Postfix address rewriting.
|
||||||
@ -355,6 +362,11 @@ SMTPD(8) SMTPD(8)
|
|||||||
authority (CA) that issued the Postfix SMTP server
|
authority (CA) that issued the Postfix SMTP server
|
||||||
certificate.
|
certificate.
|
||||||
|
|
||||||
|
<b><a href="postconf.5.html#smtpd_tls_always_issue_session_ids">smtpd_tls_always_issue_session_ids</a> (yes)</b>
|
||||||
|
Force the Postfix SMTP server to issue a TLS ses-
|
||||||
|
sion id, even when TLS session caching is turned
|
||||||
|
off (<a href="postconf.5.html#smtpd_tls_session_cache_database">smtpd_tls_session_cache_database</a> is empty).
|
||||||
|
|
||||||
<b><a href="postconf.5.html#smtpd_tls_ask_ccert">smtpd_tls_ask_ccert</a> (no)</b>
|
<b><a href="postconf.5.html#smtpd_tls_ask_ccert">smtpd_tls_ask_ccert</a> (no)</b>
|
||||||
Ask a remote SMTP client for a client certificate.
|
Ask a remote SMTP client for a client certificate.
|
||||||
|
|
||||||
@ -694,9 +706,9 @@ SMTPD(8) SMTPD(8)
|
|||||||
Available in Postfix version 2.3 and later:
|
Available in Postfix version 2.3 and later:
|
||||||
|
|
||||||
<b><a href="postconf.5.html#smtpd_peername_lookup">smtpd_peername_lookup</a> (yes)</b>
|
<b><a href="postconf.5.html#smtpd_peername_lookup">smtpd_peername_lookup</a> (yes)</b>
|
||||||
Attempt to look up the Postfix SMTP client host-
|
Attempt to look up the remote SMTP client hostname,
|
||||||
name, and verify that the name matches the client
|
and verify that the name matches the client IP
|
||||||
IP address.
|
address.
|
||||||
|
|
||||||
The per SMTP client connection count and request rate lim-
|
The per SMTP client connection count and request rate lim-
|
||||||
its are implemented in co-operation with the <a href="anvil.8.html"><b>anvil</b>(8)</a> ser-
|
its are implemented in co-operation with the <a href="anvil.8.html"><b>anvil</b>(8)</a> ser-
|
||||||
|
@ -259,6 +259,14 @@ IBM T.J. Watson Research
|
|||||||
P.O. Box 704
|
P.O. Box 704
|
||||||
Yorktown Heights, NY 10598, USA
|
Yorktown Heights, NY 10598, USA
|
||||||
|
|
||||||
|
TLS support by:
|
||||||
|
Lutz Jaenicke
|
||||||
|
Brandenburg University of Technology
|
||||||
|
Cottbus, Germany
|
||||||
|
|
||||||
|
Victor Duchovni
|
||||||
|
Morgan Stanley
|
||||||
|
|
||||||
SASL support originally by:
|
SASL support originally by:
|
||||||
Till Franke
|
Till Franke
|
||||||
SuSE Rhein/Main AG
|
SuSE Rhein/Main AG
|
||||||
|
@ -127,13 +127,31 @@ the program reads queue IDs from standard input.
|
|||||||
Specify \fB-r ALL\fR to requeue all messages. As a safety
|
Specify \fB-r ALL\fR to requeue all messages. As a safety
|
||||||
measure, the word \fBALL\fR must be specified in upper case.
|
measure, the word \fBALL\fR must be specified in upper case.
|
||||||
.sp
|
.sp
|
||||||
A requeued message is moved to the \fBmaildrop\fR queue, from
|
A requeued message is moved to the \fBmaildrop\fR queue,
|
||||||
where it is copied by the pickup daemon to a new file whose name
|
from where it is copied by the \fBpickup\fR(8) and
|
||||||
is guaranteed to match the new queue file inode number. The
|
\fBcleanup\fR(8) daemons to a new queue file. In many
|
||||||
new queue file is subjected again to mail address rewriting and
|
respects its handling differs from that of a new local
|
||||||
substitution. This is useful when rewriting rules or virtual
|
submission.
|
||||||
mappings have changed.
|
.RS
|
||||||
|
.IP \(bu
|
||||||
|
The message is not subjected to the smtpd_milters or
|
||||||
|
non_smtpd_milters settings. When mail has passed through
|
||||||
|
an external content filter, this would produce incorrect
|
||||||
|
results with Milter applications that depend on original
|
||||||
|
SMTP connection state information.
|
||||||
|
.IP \(bu
|
||||||
|
The message is subjected again to mail address rewriting
|
||||||
|
and substitution. This is useful when rewriting rules or
|
||||||
|
virtual mappings have changed.
|
||||||
.sp
|
.sp
|
||||||
|
The address rewriting context (local or remote) is the same
|
||||||
|
as when the message was received.
|
||||||
|
.IP \(bu
|
||||||
|
The message is subjected to the same content_filter settings
|
||||||
|
(if any) as used for new local mail submissions. This is
|
||||||
|
useful when content_filter settings have changed.
|
||||||
|
.RE
|
||||||
|
.IP
|
||||||
Warning: Postfix queue IDs are reused.
|
Warning: Postfix queue IDs are reused.
|
||||||
There is a very small possibility that \fBpostsuper\fR(1) requeues
|
There is a very small possibility that \fBpostsuper\fR(1) requeues
|
||||||
the wrong message file when it is executed while the Postfix mail
|
the wrong message file when it is executed while the Postfix mail
|
||||||
|
@ -1901,11 +1901,6 @@ Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks).
|
|||||||
The default time unit is s (seconds).
|
The default time unit is s (seconds).
|
||||||
.SH lmtp_sasl_auth_enable (default: no)
|
.SH lmtp_sasl_auth_enable (default: no)
|
||||||
Enable SASL authentication in the Postfix LMTP client.
|
Enable SASL authentication in the Postfix LMTP client.
|
||||||
.SH lmtp_sasl_auth_enforce (default: yes)
|
|
||||||
The LMTP-specific version of the smtp_sasl_auth_enforce
|
|
||||||
configuration parameter. See there for details.
|
|
||||||
.PP
|
|
||||||
This feature is available in Postfix 2.3 and later.
|
|
||||||
.SH lmtp_sasl_mechanism_filter (default: empty)
|
.SH lmtp_sasl_mechanism_filter (default: empty)
|
||||||
The LMTP-specific version of the smtp_sasl_mechanism_filter
|
The LMTP-specific version of the smtp_sasl_mechanism_filter
|
||||||
configuration parameter. See there for details.
|
configuration parameter. See there for details.
|
||||||
@ -4218,13 +4213,6 @@ smtp_sasl_auth_enable = yes
|
|||||||
.fi
|
.fi
|
||||||
.ad
|
.ad
|
||||||
.ft R
|
.ft R
|
||||||
.SH smtp_sasl_auth_enforce (default: yes)
|
|
||||||
If sender-dependent SASL passwords are turned off, defer mail
|
|
||||||
delivery when an SMTP server does not support SASL authentication,
|
|
||||||
while smtp_sasl_password_maps contains SASL login/password information
|
|
||||||
for that server.
|
|
||||||
.PP
|
|
||||||
This feature is available in Postfix 2.3 and later.
|
|
||||||
.SH smtp_sasl_mechanism_filter (default: empty)
|
.SH smtp_sasl_mechanism_filter (default: empty)
|
||||||
If non-empty, a Postfix SMTP client filter for the remote SMTP
|
If non-empty, a Postfix SMTP client filter for the remote SMTP
|
||||||
server's list of offered SASL mechanisms. Different client and
|
server's list of offered SASL mechanisms. Different client and
|
||||||
@ -5831,7 +5819,7 @@ This list overrides any commands built into the Postfix SMTP server.
|
|||||||
The lookup key to be used in SMTP \fBaccess\fR(5) tables instead of the
|
The lookup key to be used in SMTP \fBaccess\fR(5) tables instead of the
|
||||||
null sender address.
|
null sender address.
|
||||||
.SH smtpd_peername_lookup (default: yes)
|
.SH smtpd_peername_lookup (default: yes)
|
||||||
Attempt to look up the Postfix SMTP client hostname, and verify that
|
Attempt to look up the remote SMTP client hostname, and verify that
|
||||||
the name matches the client IP address. A client name is set to
|
the name matches the client IP address. A client name is set to
|
||||||
"unknown" when it cannot be looked up or verified, or when name
|
"unknown" when it cannot be looked up or verified, or when name
|
||||||
lookup is disabled. Turning off name lookup reduces delays due to
|
lookup is disabled. Turning off name lookup reduces delays due to
|
||||||
@ -6457,6 +6445,37 @@ smtpd_tls_CApath = /etc/postfix/certs
|
|||||||
.ft R
|
.ft R
|
||||||
.PP
|
.PP
|
||||||
This feature is available in Postfix 2.2 and later.
|
This feature is available in Postfix 2.2 and later.
|
||||||
|
.SH smtpd_tls_always_issue_session_ids (default: yes)
|
||||||
|
Force the Postfix SMTP server to issue a TLS session id, even
|
||||||
|
when TLS session caching is turned off (smtpd_tls_session_cache_database
|
||||||
|
is empty). This behavior is compatible with Postfix < 2.3.
|
||||||
|
.PP
|
||||||
|
With Postfix 2.3 and later the Postfix SMTP server can disable
|
||||||
|
session id generation when TLS session caching is turned off. This
|
||||||
|
keeps clients from caching sessions that almost certainly cannot
|
||||||
|
be re-used.
|
||||||
|
.PP
|
||||||
|
By default, the Postfix SMTP server always generates TLS session
|
||||||
|
ids. This works around a known defect in mail client applications
|
||||||
|
such as MS Outlook, and may also prevent interoperability issues
|
||||||
|
with other MTAs.
|
||||||
|
.PP
|
||||||
|
Example:
|
||||||
|
.na
|
||||||
|
.nf
|
||||||
|
.in +4
|
||||||
|
.nf
|
||||||
|
.na
|
||||||
|
.ft C
|
||||||
|
smtpd_tls_always_issue_session_ids = no
|
||||||
|
.fi
|
||||||
|
.ad
|
||||||
|
.ft R
|
||||||
|
.in -4
|
||||||
|
.fi
|
||||||
|
.ad
|
||||||
|
.PP
|
||||||
|
This feature is available in Postfix 2.3 and later.
|
||||||
.SH smtpd_tls_ask_ccert (default: no)
|
.SH smtpd_tls_ask_ccert (default: no)
|
||||||
Ask a remote SMTP client for a client certificate. This
|
Ask a remote SMTP client for a client certificate. This
|
||||||
information is needed for certificate based mail relaying with,
|
information is needed for certificate based mail relaying with,
|
||||||
|
@ -262,11 +262,6 @@ If non-empty, a Postfix SMTP client filter for the remote SMTP
|
|||||||
server's list of offered SASL mechanisms.
|
server's list of offered SASL mechanisms.
|
||||||
.PP
|
.PP
|
||||||
Available in Postfix version 2.3 and later:
|
Available in Postfix version 2.3 and later:
|
||||||
.IP "\fBsmtp_sasl_auth_enforce (yes)\fR"
|
|
||||||
If sender-dependent SASL passwords are turned off, defer mail
|
|
||||||
delivery when an SMTP server does not support SASL authentication,
|
|
||||||
while smtp_sasl_password_maps contains SASL login/password information
|
|
||||||
for that server.
|
|
||||||
.IP "\fBsmtp_sender_dependent_authentication (no)\fR"
|
.IP "\fBsmtp_sender_dependent_authentication (no)\fR"
|
||||||
Enable sender-dependent authentication in the Postfix SMTP client; this is
|
Enable sender-dependent authentication in the Postfix SMTP client; this is
|
||||||
available only with SASL authentication, and disables SMTP connection
|
available only with SASL authentication, and disables SMTP connection
|
||||||
@ -327,6 +322,13 @@ Enable additional Postfix SMTP client logging of TLS activity.
|
|||||||
.IP "\fBsmtp_tls_note_starttls_offer (no)\fR"
|
.IP "\fBsmtp_tls_note_starttls_offer (no)\fR"
|
||||||
Log the hostname of a remote SMTP server that offers STARTTLS,
|
Log the hostname of a remote SMTP server that offers STARTTLS,
|
||||||
when TLS is not already enabled for that server.
|
when TLS is not already enabled for that server.
|
||||||
|
.IP "\fBsmtp_tls_policy_maps (empty)\fR"
|
||||||
|
Optional lookup tables with the Postfix SMTP client TLS security
|
||||||
|
policy by next-hop destination; when a non-empty value is specified,
|
||||||
|
this overrides the obsolete smtp_tls_per_site parameter.
|
||||||
|
.IP "\fBsmtp_tls_mandatory_protocols (SSLv3, TLSv1)\fR"
|
||||||
|
List of TLS protocols that the Postfix SMTP client will use
|
||||||
|
with mandatory TLS encryption.
|
||||||
.IP "\fBsmtp_tls_scert_verifydepth (5)\fR"
|
.IP "\fBsmtp_tls_scert_verifydepth (5)\fR"
|
||||||
The verification depth for remote SMTP server certificates.
|
The verification depth for remote SMTP server certificates.
|
||||||
.IP "\fBsmtp_tls_secure_cert_match (nexthop, dot-nexthop)\fR"
|
.IP "\fBsmtp_tls_secure_cert_match (nexthop, dot-nexthop)\fR"
|
||||||
|
@ -124,6 +124,12 @@ to a remote SMTP client.
|
|||||||
.IP "\fBsmtpd_delay_open_until_valid_rcpt (yes)\fR"
|
.IP "\fBsmtpd_delay_open_until_valid_rcpt (yes)\fR"
|
||||||
Postpone the start of an SMTP mail transaction until a valid
|
Postpone the start of an SMTP mail transaction until a valid
|
||||||
RCPT TO command is received.
|
RCPT TO command is received.
|
||||||
|
.PP
|
||||||
|
Available in Postfix version 2.3 and later:
|
||||||
|
.IP "\fBsmtpd_tls_always_issue_session_ids (yes)\fR"
|
||||||
|
Force the Postfix SMTP server to issue a TLS session id, even
|
||||||
|
when TLS session caching is turned off (smtpd_tls_session_cache_database
|
||||||
|
is empty).
|
||||||
.SH "ADDRESS REWRITING CONTROLS"
|
.SH "ADDRESS REWRITING CONTROLS"
|
||||||
.na
|
.na
|
||||||
.nf
|
.nf
|
||||||
@ -310,6 +316,10 @@ The file with the certificate of the certification authority
|
|||||||
.IP "\fBsmtpd_tls_CAfile (empty)\fR"
|
.IP "\fBsmtpd_tls_CAfile (empty)\fR"
|
||||||
The file with the certificate of the certification authority
|
The file with the certificate of the certification authority
|
||||||
(CA) that issued the Postfix SMTP server certificate.
|
(CA) that issued the Postfix SMTP server certificate.
|
||||||
|
.IP "\fBsmtpd_tls_always_issue_session_ids (yes)\fR"
|
||||||
|
Force the Postfix SMTP server to issue a TLS session id, even
|
||||||
|
when TLS session caching is turned off (smtpd_tls_session_cache_database
|
||||||
|
is empty).
|
||||||
.IP "\fBsmtpd_tls_ask_ccert (no)\fR"
|
.IP "\fBsmtpd_tls_ask_ccert (no)\fR"
|
||||||
Ask a remote SMTP client for a client certificate.
|
Ask a remote SMTP client for a client certificate.
|
||||||
.IP "\fBsmtpd_tls_auth_only (no)\fR"
|
.IP "\fBsmtpd_tls_auth_only (no)\fR"
|
||||||
@ -562,7 +572,7 @@ before it is flushed upon receipt of EHLO, RSET, or end of DATA.
|
|||||||
.PP
|
.PP
|
||||||
Available in Postfix version 2.3 and later:
|
Available in Postfix version 2.3 and later:
|
||||||
.IP "\fBsmtpd_peername_lookup (yes)\fR"
|
.IP "\fBsmtpd_peername_lookup (yes)\fR"
|
||||||
Attempt to look up the Postfix SMTP client hostname, and verify that
|
Attempt to look up the remote SMTP client hostname, and verify that
|
||||||
the name matches the client IP address.
|
the name matches the client IP address.
|
||||||
.PP
|
.PP
|
||||||
The per SMTP client connection count and request rate limits are
|
The per SMTP client connection count and request rate limits are
|
||||||
|
@ -253,7 +253,6 @@ while (<>) {
|
|||||||
s;\blmtp_rcpt_timeout\b;<a href="postconf.5.html#lmtp_rcpt_timeout">$&</a>;g;
|
s;\blmtp_rcpt_timeout\b;<a href="postconf.5.html#lmtp_rcpt_timeout">$&</a>;g;
|
||||||
s;\blmtp_rset_timeout\b;<a href="postconf.5.html#lmtp_rset_timeout">$&</a>;g;
|
s;\blmtp_rset_timeout\b;<a href="postconf.5.html#lmtp_rset_timeout">$&</a>;g;
|
||||||
s;\blmtp_sasl_auth_enable\b;<a href="postconf.5.html#lmtp_sasl_auth_enable">$&</a>;g;
|
s;\blmtp_sasl_auth_enable\b;<a href="postconf.5.html#lmtp_sasl_auth_enable">$&</a>;g;
|
||||||
s;\blmtp_sasl_auth_enforce\b;<a href="postconf.5.html#lmtp_sasl_auth_enforce">$&</a>;g;
|
|
||||||
s;\blmtp_sasl_password_maps\b;<a href="postconf.5.html#lmtp_sasl_password_maps">$&</a>;g;
|
s;\blmtp_sasl_password_maps\b;<a href="postconf.5.html#lmtp_sasl_password_maps">$&</a>;g;
|
||||||
s;\blmtp_sasl_security_options\b;<a href="postconf.5.html#lmtp_sasl_security_options">$&</a>;g;
|
s;\blmtp_sasl_security_options\b;<a href="postconf.5.html#lmtp_sasl_security_options">$&</a>;g;
|
||||||
s;\blmtp_sasl_type\b;<a href="postconf.5.html#lmtp_sasl_type">$&</a>;g;
|
s;\blmtp_sasl_type\b;<a href="postconf.5.html#lmtp_sasl_type">$&</a>;g;
|
||||||
@ -526,7 +525,6 @@ while (<>) {
|
|||||||
s;\bsmtp_[-</Bb>]*\n* *[<Bb>]*sasl_[-</Bb>]*\n* *[<Bb>]*tls_[-</Bb>]*\n* *[<Bb>]*secu[-</Bb>]*\n* *[<Bb>]*rity_options\b;<a href="postconf.5.html#smtp_sasl_tls_security_options">$&</a>;g;
|
s;\bsmtp_[-</Bb>]*\n* *[<Bb>]*sasl_[-</Bb>]*\n* *[<Bb>]*tls_[-</Bb>]*\n* *[<Bb>]*secu[-</Bb>]*\n* *[<Bb>]*rity_options\b;<a href="postconf.5.html#smtp_sasl_tls_security_options">$&</a>;g;
|
||||||
s;\bsmtp_sasl_tls_verified_secu[-</Bb>]*\n* *[<Bb>]*rity_options\b;<a href="postconf.5.html#smtp_sasl_tls_verified_security_options">$&</a>;g;
|
s;\bsmtp_sasl_tls_verified_secu[-</Bb>]*\n* *[<Bb>]*rity_options\b;<a href="postconf.5.html#smtp_sasl_tls_verified_security_options">$&</a>;g;
|
||||||
s;\bsmtp_sasl_type\b;<a href="postconf.5.html#smtp_sasl_type">$&</a>;g;
|
s;\bsmtp_sasl_type\b;<a href="postconf.5.html#smtp_sasl_type">$&</a>;g;
|
||||||
s;\bsmtp_sasl_auth_enforce\b;<a href="postconf.5.html#smtp_sasl_auth_enforce">$&</a>;g;
|
|
||||||
s;\bsmtp_starttls_timeout\b;<a href="postconf.5.html#smtp_starttls_timeout">$&</a>;g;
|
s;\bsmtp_starttls_timeout\b;<a href="postconf.5.html#smtp_starttls_timeout">$&</a>;g;
|
||||||
s;\bsmtp_tls_CAfile\b;<a href="postconf.5.html#smtp_tls_CAfile">$&</a>;g;
|
s;\bsmtp_tls_CAfile\b;<a href="postconf.5.html#smtp_tls_CAfile">$&</a>;g;
|
||||||
s;\bsmtp_tls_CApath\b;<a href="postconf.5.html#smtp_tls_CApath">$&</a>;g;
|
s;\bsmtp_tls_CApath\b;<a href="postconf.5.html#smtp_tls_CApath">$&</a>;g;
|
||||||
@ -577,6 +575,7 @@ while (<>) {
|
|||||||
s;\bsmtpd_tls_req_ccert\b;<a href="postconf.5.html#smtpd_tls_req_ccert">$&</a>;g;
|
s;\bsmtpd_tls_req_ccert\b;<a href="postconf.5.html#smtpd_tls_req_ccert">$&</a>;g;
|
||||||
s;\bsmtpd_tls_session_cache_database\b;<a href="postconf.5.html#smtpd_tls_session_cache_database">$&</a>;g;
|
s;\bsmtpd_tls_session_cache_database\b;<a href="postconf.5.html#smtpd_tls_session_cache_database">$&</a>;g;
|
||||||
s;\bsmtpd_tls_session_cache_timeout\b;<a href="postconf.5.html#smtpd_tls_session_cache_timeout">$&</a>;g;
|
s;\bsmtpd_tls_session_cache_timeout\b;<a href="postconf.5.html#smtpd_tls_session_cache_timeout">$&</a>;g;
|
||||||
|
s;\bsmtpd_tls_always_issue_session_ids\b;<a href="postconf.5.html#smtpd_tls_always_issue_session_ids">$&</a>;g;
|
||||||
s;\bsmtpd_tls_wrappermode\b;<a href="postconf.5.html#smtpd_tls_wrappermode">$&</a>;g;
|
s;\bsmtpd_tls_wrappermode\b;<a href="postconf.5.html#smtpd_tls_wrappermode">$&</a>;g;
|
||||||
s;\bsmtpd_use_tls\b;<a href="postconf.5.html#smtpd_use_tls">$&</a>;g;
|
s;\bsmtpd_use_tls\b;<a href="postconf.5.html#smtpd_use_tls">$&</a>;g;
|
||||||
s;\btls_daemon_random_bytes\b;<a href="postconf.5.html#tls_daemon_random_bytes">$&</a>;g;
|
s;\btls_daemon_random_bytes\b;<a href="postconf.5.html#tls_daemon_random_bytes">$&</a>;g;
|
||||||
|
@ -112,7 +112,7 @@ Berkeley DB versions</a></h2>
|
|||||||
Normally, Postfix builds with the default DB version that ships
|
Normally, Postfix builds with the default DB version that ships
|
||||||
with the system. </p>
|
with the system. </p>
|
||||||
|
|
||||||
<p> To build Postfix on BSD systems with a specific DB version,
|
<p> To build Postfix on BSD systems with a non-default DB version,
|
||||||
use a variant of the following commands: </p>
|
use a variant of the following commands: </p>
|
||||||
|
|
||||||
<blockquote>
|
<blockquote>
|
||||||
|
@ -634,12 +634,10 @@ after-filter smtpd process, so that filtered mail is logged with
|
|||||||
the real client name IP address. See smtp(8) and XFORWARD_README
|
the real client name IP address. See smtp(8) and XFORWARD_README
|
||||||
for more information. </p>
|
for more information. </p>
|
||||||
|
|
||||||
<li> <p> With "-o disable_mime_output_conversion=yes", the scan
|
<li> <p> The "-o disable_mime_output_conversion=yes" is a workaround
|
||||||
delivery agent will not convert 8BITMIME mail to quoted-printable
|
that prevents the breaking of domainkeys and other digital signatures.
|
||||||
form while delivering to the content filter, as that would invalidate
|
This is needed because some SMTP-based content filters don't announce
|
||||||
domainkeys and other digital signatures. This workaround is needed
|
8BITMIME support, even though they can handle it just fine. </p>
|
||||||
because some SMTP-based content filters don't announce 8BITMIME
|
|
||||||
support, even though they can handle it just fine. </p>
|
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
@ -21,11 +21,20 @@
|
|||||||
|
|
||||||
<p> Warning: if you can't compile Postfix because the file "db.h"
|
<p> Warning: if you can't compile Postfix because the file "db.h"
|
||||||
isn't found, then you MUST install the Berkeley DB development
|
isn't found, then you MUST install the Berkeley DB development
|
||||||
package (package name: db???-devel-???) that comes with your Linux
|
package (name: db???-devel-???) that matches your system library.
|
||||||
system. Only that package contains the files that correspond to the
|
You can find out what is installed with the rpm command. For example:
|
||||||
Berkeley DB version that is used by the system library routines.
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
<blockquote>
|
||||||
|
<pre>
|
||||||
|
$ <b>rpm -qf /usr/lib/libdb.so</b>
|
||||||
|
db4-4.3.29-2
|
||||||
|
</pre>
|
||||||
|
</blockquote>
|
||||||
|
|
||||||
|
<p> This means that you need to install db4-devel-4.3.29-2 (on
|
||||||
|
some systems, specify <tt>/lib/libdb.so</tt> in the rpm query). </p>
|
||||||
|
|
||||||
<p> DO NOT download some Berkeley DB version from the network.
|
<p> DO NOT download some Berkeley DB version from the network.
|
||||||
Every Postfix program will dump core when it is built with a different
|
Every Postfix program will dump core when it is built with a different
|
||||||
Berkeley DB version than the version that is used by the system
|
Berkeley DB version than the version that is used by the system
|
||||||
|
@ -228,7 +228,7 @@ library from Sendmail source code instead: </p>
|
|||||||
<blockquote>
|
<blockquote>
|
||||||
<pre>
|
<pre>
|
||||||
$ <b>gzcat sendmail-<i>x.y.z</i>.tar.gz | tar xf -</b>
|
$ <b>gzcat sendmail-<i>x.y.z</i>.tar.gz | tar xf -</b>
|
||||||
$ <b>cd sendmail-<i>x.y.z</i></b>
|
$ <b>cd sendmail-<i>x.y.z</i>/libmilter</b>
|
||||||
$ <b>make</b>
|
$ <b>make</b>
|
||||||
[...<i>lots of output omitted</i>...]
|
[...<i>lots of output omitted</i>...]
|
||||||
</pre>
|
</pre>
|
||||||
@ -521,6 +521,9 @@ href="#workarounds">workarounds</a> section below for solutions.
|
|||||||
<tr> <td> j </td> <td> Always </td> <td> value of myhostname </td>
|
<tr> <td> j </td> <td> Always </td> <td> value of myhostname </td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
|
<tr> <td> _ </td> <td> Always </td> <td> The validated client name
|
||||||
|
and address </td> </tr>
|
||||||
|
|
||||||
<tr> <td> {auth_authen} </td> <td> MAIL, DATA, EOM </td> <td> SASL
|
<tr> <td> {auth_authen} </td> <td> MAIL, DATA, EOM </td> <td> SASL
|
||||||
login name </td> </tr>
|
login name </td> </tr>
|
||||||
|
|
||||||
@ -613,9 +616,9 @@ TO </td> </tr>
|
|||||||
<h2><a name="workarounds">Workarounds</a></h2>
|
<h2><a name="workarounds">Workarounds</a></h2>
|
||||||
|
|
||||||
<p> Content filters may break domain key etc. signatures. If you
|
<p> Content filters may break domain key etc. signatures. If you
|
||||||
use an SMTP-based filter as described in FILTER_README, then you
|
use an SMTP-based content filter, then you should add a line to
|
||||||
should add a line to master.cf with "disable_mime_output_conversion
|
master.cf with "-o disable_mime_output_conversion=yes" (note: no
|
||||||
= yes", as described in the <a
|
spaces around the "="), as described in the <a
|
||||||
href="FILTER_README.html#advanced_filter">advanced content filter</a>
|
href="FILTER_README.html#advanced_filter">advanced content filter</a>
|
||||||
example. </p>
|
example. </p>
|
||||||
|
|
||||||
|
@ -127,7 +127,7 @@ in the Postfix top-level directory: </p>
|
|||||||
|
|
||||||
<blockquote>
|
<blockquote>
|
||||||
<pre>
|
<pre>
|
||||||
% make makefiles CCARGS='-DUSE_SASL_AUTH -DDEF_SASL_SERVER=\"dovecot\"'
|
% make makefiles CCARGS='-DUSE_SASL_AUTH -DDEF_SASL_SERVER_TYPE=\"dovecot\"'
|
||||||
</pre>
|
</pre>
|
||||||
</blockquote>
|
</blockquote>
|
||||||
|
|
||||||
@ -138,7 +138,7 @@ INSTALL document. </p>
|
|||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
|
|
||||||
<li> <p> The "-DDEF_SASL_SERVER" stuff is not necessary; it just
|
<li> <p> The "-DDEF_SASL_SERVER_TYPE" stuff is not necessary; it just
|
||||||
makes Postfix configuration a little more convenient because you
|
makes Postfix configuration a little more convenient because you
|
||||||
don't have to specify the SASL plug-in type in the Postfix main.cf
|
don't have to specify the SASL plug-in type in the Postfix main.cf
|
||||||
file. </p>
|
file. </p>
|
||||||
|
@ -490,8 +490,9 @@ and OE (5.01 Mac on all ports). </p>
|
|||||||
|
|
||||||
<p> It is strictly discouraged to use this mode from main.cf. If
|
<p> It is strictly discouraged to use this mode from main.cf. If
|
||||||
you want to support this service, enable a special port in master.cf
|
you want to support this service, enable a special port in master.cf
|
||||||
and specify "-o smtpd_tls_wrappermode = yes" as an smtpd(8) command
|
and specify "-o smtpd_tls_wrappermode=yes" (note: no space around
|
||||||
line option. Port 465 (smtps) was once chosen for this feature.
|
the "=") as an smtpd(8) command line option. Port 465 (smtps) was
|
||||||
|
once chosen for this feature.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p> Example: </p>
|
<p> Example: </p>
|
||||||
@ -631,6 +632,22 @@ recommends a maximum of 24 hours. </p>
|
|||||||
</pre>
|
</pre>
|
||||||
</blockquote>
|
</blockquote>
|
||||||
|
|
||||||
|
<p> When the Postfix SMTP server does not save TLS sessions to an
|
||||||
|
external cache database, client-side session caching is unlikely
|
||||||
|
to be useful. To prevent such wastage, the Postfix SMTP server can
|
||||||
|
be configured to not issue TLS session ids. By default the Postfix
|
||||||
|
SMTP server always issues TLS session ids. This works around known
|
||||||
|
interoperability issues with some MUAs, and prevents possible
|
||||||
|
interoperability issues with other MTAs. </p>
|
||||||
|
|
||||||
|
<p> Example: </p>
|
||||||
|
|
||||||
|
<blockquote>
|
||||||
|
<pre>
|
||||||
|
smtpd_tls_always_issue_session_ids = no
|
||||||
|
</pre>
|
||||||
|
</blockquote>
|
||||||
|
|
||||||
<h3><a name="server_access">Server access control</a> </h3>
|
<h3><a name="server_access">Server access control</a> </h3>
|
||||||
|
|
||||||
<p> Postfix TLS support introduces three additional features for
|
<p> Postfix TLS support introduces three additional features for
|
||||||
@ -1822,10 +1839,10 @@ the following information: </p>
|
|||||||
<dl>
|
<dl>
|
||||||
|
|
||||||
<dt> remote SMTP server hostname </dt> <dd> This is simply the DNS
|
<dt> remote SMTP server hostname </dt> <dd> This is simply the DNS
|
||||||
name of the server that the Postfix SMTP client connects to; this name
|
name of the server that the Postfix SMTP client connects to; this
|
||||||
may be obtained from other DNS lookups, such as MX lookups or CNAME
|
name may be obtained from other DNS lookups, such as MX lookups or
|
||||||
lookups. Use of the hostname lookup key is discouraged; always use the
|
CNAME lookups. Use of the hostname lookup key is discouraged; always
|
||||||
next-hop destination instead. </dd>
|
use the next-hop destination instead. </dd>
|
||||||
|
|
||||||
<dt> next-hop destination </dt> <dd> This is normally the domain portion
|
<dt> next-hop destination </dt> <dd> This is normally the domain portion
|
||||||
of the recipient address, but it may be overridden by information from
|
of the recipient address, but it may be overridden by information from
|
||||||
@ -1924,17 +1941,19 @@ steps: </p>
|
|||||||
|
|
||||||
<ol>
|
<ol>
|
||||||
|
|
||||||
<li> <p> Use a dedicated transport for all secure-channel deliveries. </p>
|
<li> <p> Use a dedicated message delivery transport (for example,
|
||||||
|
"securetls") as illustrated below. </p>
|
||||||
|
|
||||||
<li> <p> Eliminate MX lookups. Specify local transport(5) table
|
<li> <p> Eliminate MX lookups. Specify local transport(5) table
|
||||||
entries for sensitive domains with explicit smtp:[<i>mailhost</i>]
|
entries for sensitive domains with explicit securetls:[<i>mailhost</i>]
|
||||||
or smtp:[<i>mailhost</i>]:<i>port</i> destinations (you can assure
|
or securetls:[<i>mailhost</i>]:<i>port</i> destinations (you can
|
||||||
security of this table unlike DNS); in the smtp_tls_per_site
|
assure security of this table unlike DNS). This prevents false
|
||||||
table, specify the value "MUST" for the key [<i>mailhost</i>] or
|
hostname information in DNS MX records from changing Postfix's
|
||||||
smtp:[<i>mailhost</i>]:<i>port</i>. This prevents false hostname
|
notion of the server hostname that is used for TLS policy lookup
|
||||||
information in DNS MX records from changing Postfix's notion of the
|
and server certificate verification. The "securetls" transport is
|
||||||
server hostname that is used for TLS policy lookup and server certificate
|
configured to enforce TLS with peername verification, and to disable
|
||||||
verification. </p>
|
the SMTP connection cache which could interfere with enforcement
|
||||||
|
of smtp_tls_per_site policies. </p>
|
||||||
|
|
||||||
<li> <p> Disallow CNAME hostname overrides. In main.cf, specify
|
<li> <p> Disallow CNAME hostname overrides. In main.cf, specify
|
||||||
"smtp_cname_overrides_servername = no". This prevents false hostname
|
"smtp_cname_overrides_servername = no". This prevents false hostname
|
||||||
@ -1971,8 +1990,6 @@ destinations. </p>
|
|||||||
|
|
||||||
/etc/postfix/master.cf:
|
/etc/postfix/master.cf:
|
||||||
securetls unix - - n - 100 smtp
|
securetls unix - - n - 100 smtp
|
||||||
-o smtp_connection_cache_on_demand=no
|
|
||||||
-o smtp_connection_cache_destinations=
|
|
||||||
-o smtp_enforce_tls=yes
|
-o smtp_enforce_tls=yes
|
||||||
-o smtp_tls_enforce_peername=yes
|
-o smtp_tls_enforce_peername=yes
|
||||||
</pre>
|
</pre>
|
||||||
|
@ -8941,7 +8941,7 @@ process instance while mail is being forwarded. </p>
|
|||||||
|
|
||||||
%PARAM smtpd_peername_lookup yes
|
%PARAM smtpd_peername_lookup yes
|
||||||
|
|
||||||
<p> Attempt to look up the Postfix SMTP client hostname, and verify that
|
<p> Attempt to look up the remote SMTP client hostname, and verify that
|
||||||
the name matches the client IP address. A client name is set to
|
the name matches the client IP address. A client name is set to
|
||||||
"unknown" when it cannot be looked up or verified, or when name
|
"unknown" when it cannot be looked up or verified, or when name
|
||||||
lookup is disabled. Turning off name lookup reduces delays due to
|
lookup is disabled. Turning off name lookup reduces delays due to
|
||||||
@ -10367,22 +10367,6 @@ configuration parameter. See there for details. </p>
|
|||||||
|
|
||||||
<p> This feature is available in Postfix 2.3 and later. </p>
|
<p> This feature is available in Postfix 2.3 and later. </p>
|
||||||
|
|
||||||
%PARAM smtp_sasl_auth_enforce yes
|
|
||||||
|
|
||||||
<p> If sender-dependent SASL passwords are turned off, defer mail
|
|
||||||
delivery when an SMTP server does not support SASL authentication,
|
|
||||||
while smtp_sasl_password_maps contains SASL login/password information
|
|
||||||
for that server. </p>
|
|
||||||
|
|
||||||
<p> This feature is available in Postfix 2.3 and later. </p>
|
|
||||||
|
|
||||||
%PARAM lmtp_sasl_auth_enforce yes
|
|
||||||
|
|
||||||
<p> The LMTP-specific version of the smtp_sasl_auth_enforce
|
|
||||||
configuration parameter. See there for details. </p>
|
|
||||||
|
|
||||||
<p> This feature is available in Postfix 2.3 and later. </p>
|
|
||||||
|
|
||||||
%PARAM smtpd_tls_security_level
|
%PARAM smtpd_tls_security_level
|
||||||
|
|
||||||
<p> The SMTP TLS security level for the Postfix SMTP server; when
|
<p> The SMTP TLS security level for the Postfix SMTP server; when
|
||||||
@ -10444,3 +10428,29 @@ notifications by the smtp(8) and smtpd(8) processes. </dd>
|
|||||||
Postfix-generated email messages. The user is warned. </p>
|
Postfix-generated email messages. The user is warned. </p>
|
||||||
|
|
||||||
<p> This feature is available in Postfix 2.3 and later. </p>
|
<p> This feature is available in Postfix 2.3 and later. </p>
|
||||||
|
|
||||||
|
%PARAM smtpd_tls_always_issue_session_ids yes
|
||||||
|
|
||||||
|
<p> Force the Postfix SMTP server to issue a TLS session id, even
|
||||||
|
when TLS session caching is turned off (smtpd_tls_session_cache_database
|
||||||
|
is empty). This behavior is compatible with Postfix < 2.3. </p>
|
||||||
|
|
||||||
|
<p> With Postfix 2.3 and later the Postfix SMTP server can disable
|
||||||
|
session id generation when TLS session caching is turned off. This
|
||||||
|
keeps clients from caching sessions that almost certainly cannot
|
||||||
|
be re-used. </p>
|
||||||
|
|
||||||
|
<p> By default, the Postfix SMTP server always generates TLS session
|
||||||
|
ids. This works around a known defect in mail client applications
|
||||||
|
such as MS Outlook, and may also prevent interoperability issues
|
||||||
|
with other MTAs. </p>
|
||||||
|
|
||||||
|
<p> Example: </p>
|
||||||
|
|
||||||
|
<blockquote>
|
||||||
|
<pre>
|
||||||
|
smtpd_tls_always_issue_session_ids = no
|
||||||
|
</pre>
|
||||||
|
</blockquote>
|
||||||
|
|
||||||
|
<p> This feature is available in Postfix 2.3 and later. </p>
|
||||||
|
@ -91,7 +91,10 @@ typedef struct CLEANUP_STATE {
|
|||||||
#endif
|
#endif
|
||||||
MILTERS *milters; /* mail filters */
|
MILTERS *milters; /* mail filters */
|
||||||
const char *client_name; /* real or ersatz client */
|
const char *client_name; /* real or ersatz client */
|
||||||
|
const char *reverse_name; /* real or ersatz client */
|
||||||
const char *client_addr; /* real or ersatz client */
|
const char *client_addr; /* real or ersatz client */
|
||||||
|
int client_af; /* real or ersatz client */
|
||||||
|
const char *client_port; /* real or ersatz client */
|
||||||
} CLEANUP_STATE;
|
} CLEANUP_STATE;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -779,6 +779,10 @@ static const char *cleanup_upd_header(void *context, ssize_t index,
|
|||||||
* The lookup result will never be a pointer record.
|
* The lookup result will never be a pointer record.
|
||||||
*
|
*
|
||||||
* Index 1 is the first matching header instance.
|
* Index 1 is the first matching header instance.
|
||||||
|
*
|
||||||
|
* XXX When a header is updated repeatedly we create jumps to jumps. To
|
||||||
|
* eliminate this, rewrite the loop below so that we can start with the
|
||||||
|
* pointer record that points to the header that's being edited.
|
||||||
*/
|
*/
|
||||||
#define DONT_SAVE_RECORD 0
|
#define DONT_SAVE_RECORD 0
|
||||||
#define NO_PTR_BACKUP 0
|
#define NO_PTR_BACKUP 0
|
||||||
@ -826,7 +830,8 @@ static const char *cleanup_upd_header(void *context, ssize_t index,
|
|||||||
avail_space += read_offset - saved_read_offset;
|
avail_space += read_offset - saved_read_offset;
|
||||||
jumped = 1;
|
jumped = 1;
|
||||||
}
|
}
|
||||||
if (rec_goto(state->dst, STR(rec_buf)) < 0) {
|
if (rec_goto(state->dst, STR(rec_buf)) < 0
|
||||||
|
|| (read_offset = vstream_ftell(state->dst)) < 0) {
|
||||||
msg_warn("%s: read file %s: %m", myname, cleanup_path);
|
msg_warn("%s: read file %s: %m", myname, cleanup_path);
|
||||||
CLEANUP_UPD_HEADER_RETURN(cleanup_milter_error(state,
|
CLEANUP_UPD_HEADER_RETURN(cleanup_milter_error(state,
|
||||||
errno));
|
errno));
|
||||||
@ -1215,12 +1220,21 @@ static const char *cleanup_milter_eval(const char *name, void *ptr)
|
|||||||
/*
|
/*
|
||||||
* Connect macros.
|
* Connect macros.
|
||||||
*/
|
*/
|
||||||
|
if (strcmp(name, S8_MAC__) == 0) {
|
||||||
|
vstring_sprintf(state->temp1, "%s [%s]",
|
||||||
|
state->reverse_name, state->client_addr);
|
||||||
|
if (strcasecmp(state->client_name, state->reverse_name) != 0)
|
||||||
|
vstring_strcat(state->temp1, " (may be forged)");
|
||||||
|
return (STR(state->temp1));
|
||||||
|
}
|
||||||
if (strcmp(name, S8_MAC_J) == 0)
|
if (strcmp(name, S8_MAC_J) == 0)
|
||||||
return (var_myhostname);
|
return (var_myhostname);
|
||||||
if (strcmp(name, S8_MAC_CLIENT_ADDR) == 0)
|
if (strcmp(name, S8_MAC_CLIENT_ADDR) == 0)
|
||||||
return (nvtable_find(state->attr, MAIL_ATTR_ACT_CLIENT_ADDR));
|
return (state->client_addr);
|
||||||
if (strcmp(name, S8_MAC_CLIENT_NAME) == 0)
|
if (strcmp(name, S8_MAC_CLIENT_NAME) == 0)
|
||||||
return (nvtable_find(state->attr, MAIL_ATTR_ACT_CLIENT_NAME));
|
return (state->client_name);
|
||||||
|
if (strcmp(name, S8_MAC_CLIENT_PTR) == 0)
|
||||||
|
return (state->reverse_name);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* MAIL FROM macros.
|
* MAIL FROM macros.
|
||||||
@ -1277,6 +1291,12 @@ static const char *cleanup_milter_apply(CLEANUP_STATE *state, const char *event,
|
|||||||
if (msg_verbose)
|
if (msg_verbose)
|
||||||
msg_info("%s: %s", myname, resp);
|
msg_info("%s: %s", myname, resp);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Sanity check.
|
||||||
|
*/
|
||||||
|
if (state->client_name == 0)
|
||||||
|
msg_panic("%s: missing client info initialization", myname);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* We don't report errors that were already reported by the content
|
* We don't report errors that were already reported by the content
|
||||||
* editing call-back routines. See cleanup_milter_error() above.
|
* editing call-back routines. See cleanup_milter_error() above.
|
||||||
@ -1354,6 +1374,38 @@ static const char *cleanup_milter_apply(CLEANUP_STATE *state, const char *event,
|
|||||||
return (ret);
|
return (ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* cleanup_milter_client_init - initialize real or ersatz client info */
|
||||||
|
|
||||||
|
static void cleanup_milter_client_init(CLEANUP_STATE *state)
|
||||||
|
{
|
||||||
|
const char *proto_attr;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Either the cleanup client specifies a name, address and protocol, or
|
||||||
|
* we have a local submission and pretend localhost/127.0.0.1/AF_INET.
|
||||||
|
*/
|
||||||
|
#define NO_CLIENT_PORT "0"
|
||||||
|
|
||||||
|
state->client_name = nvtable_find(state->attr, MAIL_ATTR_ACT_CLIENT_NAME);
|
||||||
|
state->reverse_name =
|
||||||
|
nvtable_find(state->attr, MAIL_ATTR_ACT_REVERSE_CLIENT_NAME);
|
||||||
|
state->client_addr = nvtable_find(state->attr, MAIL_ATTR_ACT_CLIENT_ADDR);
|
||||||
|
state->client_port = nvtable_find(state->attr, MAIL_ATTR_ACT_CLIENT_PORT);
|
||||||
|
proto_attr = nvtable_find(state->attr, MAIL_ATTR_ACT_CLIENT_AF);
|
||||||
|
|
||||||
|
if (state->client_name == 0 || state->client_addr == 0 || proto_attr == 0
|
||||||
|
|| !alldig(proto_attr)) {
|
||||||
|
state->client_name = "localhost";
|
||||||
|
state->client_addr = "127.0.0.1";
|
||||||
|
state->client_af = AF_INET;
|
||||||
|
} else
|
||||||
|
state->client_af = atoi(proto_attr);
|
||||||
|
if (state->reverse_name == 0)
|
||||||
|
state->reverse_name = state->client_name;
|
||||||
|
if (state->client_port == 0)
|
||||||
|
state->client_port = NO_CLIENT_PORT;
|
||||||
|
}
|
||||||
|
|
||||||
/* cleanup_milter_inspect - run message through mail filter */
|
/* cleanup_milter_inspect - run message through mail filter */
|
||||||
|
|
||||||
void cleanup_milter_inspect(CLEANUP_STATE *state, MILTERS *milters)
|
void cleanup_milter_inspect(CLEANUP_STATE *state, MILTERS *milters)
|
||||||
@ -1364,6 +1416,12 @@ void cleanup_milter_inspect(CLEANUP_STATE *state, MILTERS *milters)
|
|||||||
if (msg_verbose)
|
if (msg_verbose)
|
||||||
msg_info("enter %s", myname);
|
msg_info("enter %s", myname);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Initialize, in case we're called via smtpd(8).
|
||||||
|
*/
|
||||||
|
if (state->client_name == 0)
|
||||||
|
cleanup_milter_client_init(state);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Process mail filter replies. The reply format is verified by the mail
|
* Process mail filter replies. The reply format is verified by the mail
|
||||||
* filter library.
|
* filter library.
|
||||||
@ -1382,9 +1440,6 @@ void cleanup_milter_emul_mail(CLEANUP_STATE *state,
|
|||||||
const char *addr)
|
const char *addr)
|
||||||
{
|
{
|
||||||
const char *resp;
|
const char *resp;
|
||||||
const char *proto_attr;
|
|
||||||
const char *client_port;
|
|
||||||
int client_af;
|
|
||||||
const char *helo;
|
const char *helo;
|
||||||
const char *argv[2];
|
const char *argv[2];
|
||||||
|
|
||||||
@ -1397,33 +1452,14 @@ void cleanup_milter_emul_mail(CLEANUP_STATE *state,
|
|||||||
cleanup_ins_header, cleanup_del_header,
|
cleanup_ins_header, cleanup_del_header,
|
||||||
cleanup_add_rcpt, cleanup_del_rcpt,
|
cleanup_add_rcpt, cleanup_del_rcpt,
|
||||||
cleanup_repl_body, (void *) state);
|
cleanup_repl_body, (void *) state);
|
||||||
|
if (state->client_name == 0)
|
||||||
/*
|
cleanup_milter_client_init(state);
|
||||||
* Either the cleanup client specifies a name, address and protocol, or
|
|
||||||
* we have a local submission and pretend localhost/127.0.0.1/AF_INET.
|
|
||||||
*/
|
|
||||||
#define NO_CLIENT_PORT "0"
|
|
||||||
|
|
||||||
state->client_name = nvtable_find(state->attr, MAIL_ATTR_ACT_CLIENT_NAME);
|
|
||||||
state->client_addr = nvtable_find(state->attr, MAIL_ATTR_ACT_CLIENT_ADDR);
|
|
||||||
|
|
||||||
client_port = nvtable_find(state->attr, MAIL_ATTR_ACT_CLIENT_PORT);
|
|
||||||
proto_attr = nvtable_find(state->attr, MAIL_ATTR_ACT_CLIENT_AF);
|
|
||||||
if (state->client_name == 0 || state->client_addr == 0 || proto_attr == 0
|
|
||||||
|| !alldig(proto_attr)) {
|
|
||||||
state->client_name = "localhost";
|
|
||||||
state->client_addr = "127.0.0.1";
|
|
||||||
client_af = AF_INET;
|
|
||||||
} else
|
|
||||||
client_af = atoi(proto_attr);
|
|
||||||
if (client_port == 0)
|
|
||||||
client_port = NO_CLIENT_PORT;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Emulate SMTP events.
|
* Emulate SMTP events.
|
||||||
*/
|
*/
|
||||||
if ((resp = milter_conn_event(milters, state->client_name, state->client_addr,
|
if ((resp = milter_conn_event(milters, state->client_name, state->client_addr,
|
||||||
client_port, client_af)) != 0) {
|
state->client_port, state->client_af)) != 0) {
|
||||||
cleanup_milter_apply(state, "CONNECT", resp);
|
cleanup_milter_apply(state, "CONNECT", resp);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -1453,9 +1489,16 @@ void cleanup_milter_emul_rcpt(CLEANUP_STATE *state,
|
|||||||
MILTERS *milters,
|
MILTERS *milters,
|
||||||
const char *addr)
|
const char *addr)
|
||||||
{
|
{
|
||||||
|
const char *myname = "cleanup_milter_emul_rcpt";
|
||||||
const char *resp;
|
const char *resp;
|
||||||
const char *argv[2];
|
const char *argv[2];
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Sanity check.
|
||||||
|
*/
|
||||||
|
if (state->client_name == 0)
|
||||||
|
msg_panic("%s: missing client info initialization", myname);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* CLEANUP_STAT_CONT and CLEANUP_STAT_DEFER both update the reason
|
* CLEANUP_STAT_CONT and CLEANUP_STAT_DEFER both update the reason
|
||||||
* attribute, but CLEANUP_STAT_DEFER takes precedence. It terminates
|
* attribute, but CLEANUP_STAT_DEFER takes precedence. It terminates
|
||||||
@ -1479,8 +1522,15 @@ void cleanup_milter_emul_rcpt(CLEANUP_STATE *state,
|
|||||||
|
|
||||||
void cleanup_milter_emul_data(CLEANUP_STATE *state, MILTERS *milters)
|
void cleanup_milter_emul_data(CLEANUP_STATE *state, MILTERS *milters)
|
||||||
{
|
{
|
||||||
|
const char *myname = "cleanup_milter_emul_data";
|
||||||
const char *resp;
|
const char *resp;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Sanity check.
|
||||||
|
*/
|
||||||
|
if (state->client_name == 0)
|
||||||
|
msg_panic("%s: missing client info initialization", myname);
|
||||||
|
|
||||||
if ((resp = milter_data_event(milters)) != 0)
|
if ((resp = milter_data_event(milters)) != 0)
|
||||||
cleanup_milter_apply(state, "DATA", resp);
|
cleanup_milter_apply(state, "DATA", resp);
|
||||||
}
|
}
|
||||||
@ -1716,7 +1766,7 @@ int main(int unused_argc, char **argv)
|
|||||||
msg_warn("bad add_header argument count: %d", argv->argc);
|
msg_warn("bad add_header argument count: %d", argv->argc);
|
||||||
} else {
|
} else {
|
||||||
flatten_args(arg_buf, argv->argv + 2);
|
flatten_args(arg_buf, argv->argv + 2);
|
||||||
cleanup_add_header(state, argv->argv[2], STR(arg_buf));
|
cleanup_add_header(state, argv->argv[1], STR(arg_buf));
|
||||||
}
|
}
|
||||||
} else if (strcmp(argv->argv[0], "ins_header") == 0) {
|
} else if (strcmp(argv->argv[0], "ins_header") == 0) {
|
||||||
if (argv->argc < 3) {
|
if (argv->argc < 3) {
|
||||||
|
@ -9,4 +9,6 @@ ins_header 2 X-Test-Header test header value 2
|
|||||||
del_header 2 X-Test-Header
|
del_header 2 X-Test-Header
|
||||||
ins_header 3 X-Test-Header test header value 3
|
ins_header 3 X-Test-Header test header value 3
|
||||||
upd_header 1 X X-replaced-header replacement header text
|
upd_header 1 X X-replaced-header replacement header text
|
||||||
|
upd_header 1 X X-replaced-header replacement header text
|
||||||
|
upd_header 1 X X-replaced-header replacement header text
|
||||||
close
|
close
|
||||||
|
@ -38,8 +38,10 @@
|
|||||||
1353 pointer_record: 1193
|
1353 pointer_record: 1193
|
||||||
1193 deleted_text: X-Test-Header: test header value 1
|
1193 deleted_text: X-Test-Header: test header value 1
|
||||||
1229 pointer_record: 1370
|
1229 pointer_record: 1370
|
||||||
1370 regular_text: X: X-replaced-header replacement header text
|
1370 pointer_record: 1433
|
||||||
1416 pointer_record: 881
|
1433 pointer_record: 1496
|
||||||
|
1496 regular_text: X: X-replaced-header replacement header text
|
||||||
|
1542 pointer_record: 881
|
||||||
881 regular_text: Y: 1234567
|
881 regular_text: Y: 1234567
|
||||||
893 regular_text: Message-Id: <20060514010427.E0F703D1E36@tail.porcupine.org>
|
893 regular_text: Message-Id: <20060514010427.E0F703D1E36@tail.porcupine.org>
|
||||||
954 regular_text: Date: Sat, 13 May 2006 21:04:18 -0400 (EDT)
|
954 regular_text: Date: Sat, 13 May 2006 21:04:18 -0400 (EDT)
|
||||||
|
@ -109,7 +109,10 @@ CLEANUP_STATE *cleanup_state_alloc(VSTREAM *src)
|
|||||||
state->verp_delims = 0;
|
state->verp_delims = 0;
|
||||||
state->milters = 0;
|
state->milters = 0;
|
||||||
state->client_name = 0;
|
state->client_name = 0;
|
||||||
|
state->reverse_name = 0;
|
||||||
state->client_addr = 0;
|
state->client_addr = 0;
|
||||||
|
state->client_af = 0;
|
||||||
|
state->client_port = 0;
|
||||||
return (state);
|
return (state);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1183,6 +1183,10 @@ extern char *var_smtpd_tls_scache_db;
|
|||||||
#define DEF_SMTPD_TLS_SCACHTIME "3600s"
|
#define DEF_SMTPD_TLS_SCACHTIME "3600s"
|
||||||
extern int var_smtpd_tls_scache_timeout;
|
extern int var_smtpd_tls_scache_timeout;
|
||||||
|
|
||||||
|
#define VAR_SMTPD_TLS_SET_SESSID "smtpd_tls_always_issue_session_ids"
|
||||||
|
#define DEF_SMTPD_TLS_SET_SESSID 1
|
||||||
|
extern bool var_smtpd_tls_set_sessid;
|
||||||
|
|
||||||
#define VAR_SMTPD_DELAY_OPEN "smtpd_delay_open_until_valid_rcpt"
|
#define VAR_SMTPD_DELAY_OPEN "smtpd_delay_open_until_valid_rcpt"
|
||||||
#define DEF_SMTPD_DELAY_OPEN 1
|
#define DEF_SMTPD_DELAY_OPEN 1
|
||||||
extern bool var_smtpd_delay_open;
|
extern bool var_smtpd_delay_open;
|
||||||
|
@ -20,8 +20,8 @@
|
|||||||
* Patches change both the patchlevel and the release date. Snapshots have no
|
* Patches change both the patchlevel and the release date. Snapshots have no
|
||||||
* patchlevel; they change the release date only.
|
* patchlevel; they change the release date only.
|
||||||
*/
|
*/
|
||||||
#define MAIL_RELEASE_DATE "20060711"
|
#define MAIL_RELEASE_DATE "20060724"
|
||||||
#define MAIL_VERSION_NUMBER "2.3.0"
|
#define MAIL_VERSION_NUMBER "2.3.1"
|
||||||
|
|
||||||
#ifdef SNAPSHOT
|
#ifdef SNAPSHOT
|
||||||
# define MAIL_VERSION_DATE "-" MAIL_RELEASE_DATE
|
# define MAIL_VERSION_DATE "-" MAIL_RELEASE_DATE
|
||||||
|
@ -488,7 +488,7 @@ static void milter8_close_stream(MILTER8 *milter)
|
|||||||
/* milter8_read_resp - receive command code now, receive data later */
|
/* milter8_read_resp - receive command code now, receive data later */
|
||||||
|
|
||||||
static int milter8_read_resp(MILTER8 *milter, int event, unsigned char *command,
|
static int milter8_read_resp(MILTER8 *milter, int event, unsigned char *command,
|
||||||
ssize_t *data_len)
|
ssize_t *data_len)
|
||||||
{
|
{
|
||||||
UINT32_TYPE len;
|
UINT32_TYPE len;
|
||||||
ssize_t pkt_len;
|
ssize_t pkt_len;
|
||||||
@ -963,6 +963,10 @@ static const char *milter8_event(MILTER8 *milter, int event,
|
|||||||
#define IN_CONNECT_EVENT(e) ((e) == SMFIC_CONNECT || (e) == SMFIC_HELO)
|
#define IN_CONNECT_EVENT(e) ((e) == SMFIC_CONNECT || (e) == SMFIC_HELO)
|
||||||
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
|
char *cp;
|
||||||
|
char *rp;
|
||||||
|
char ch;
|
||||||
|
|
||||||
if (milter8_read_resp(milter, event, &cmd, &data_size) != 0)
|
if (milter8_read_resp(milter, event, &cmd, &data_size) != 0)
|
||||||
return (milter->def_reply);
|
return (milter->def_reply);
|
||||||
if (msg_verbose)
|
if (msg_verbose)
|
||||||
@ -1081,6 +1085,11 @@ static const char *milter8_event(MILTER8 *milter, int event,
|
|||||||
* Decision: "ddd d.d+.d+ text". This decision is final (i.e.
|
* Decision: "ddd d.d+.d+ text". This decision is final (i.e.
|
||||||
* Sendmail 8 changes receiver state). Note: the reply may be in
|
* Sendmail 8 changes receiver state). Note: the reply may be in
|
||||||
* multi-line SMTP format.
|
* multi-line SMTP format.
|
||||||
|
*
|
||||||
|
* XXX Sendmail compatibility: sendmail 8 uses the reply as a format
|
||||||
|
* string; therefore any '%' characters in the reply are doubled.
|
||||||
|
* Postfix doesn't use replies as format strings; we replace '%%'
|
||||||
|
* by '%', and remove single (i.e. invalid) '%' characters.
|
||||||
*/
|
*/
|
||||||
case SMFIR_REPLYCODE:
|
case SMFIR_REPLYCODE:
|
||||||
if (milter8_read_data(milter, data_size,
|
if (milter8_read_data(milter, data_size,
|
||||||
@ -1097,6 +1106,15 @@ static const char *milter8_event(MILTER8 *milter, int event,
|
|||||||
milter8_conf_error(milter);
|
milter8_conf_error(milter);
|
||||||
return (milter->def_reply);
|
return (milter->def_reply);
|
||||||
}
|
}
|
||||||
|
if ((rp = cp = strchr(STR(milter->buf), '%')) != 0) {
|
||||||
|
for (;;) {
|
||||||
|
if ((ch = *cp++) == '%')
|
||||||
|
ch = *cp++;
|
||||||
|
*rp++ = ch;
|
||||||
|
if (ch == 0)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
if (IN_CONNECT_EVENT(event)) {
|
if (IN_CONNECT_EVENT(event)) {
|
||||||
#ifdef LIBMILTER_AUTO_DISCONNECT
|
#ifdef LIBMILTER_AUTO_DISCONNECT
|
||||||
milter8_close_stream(milter);
|
milter8_close_stream(milter);
|
||||||
|
@ -1,3 +1,13 @@
|
|||||||
|
# Reject with text
|
||||||
|
./test-milter -C 1 -a "554 5.7.1 1% 2%% 3%%%" -c connect -p inet:9999@127.0.0.1
|
||||||
|
./test-milter -C 1 -a "554 5.7.1 1% 2%% 3%%%" -c helo -p inet:9999@127.0.0.1
|
||||||
|
./test-milter -C 1 -a "554 5.7.1 1% 2%% 3%%%" -c mail -p inet:9999@127.0.0.1
|
||||||
|
./test-milter -C 1 -a "554 5.7.1 1% 2%% 3%%%" -c rcpt -p inet:9999@127.0.0.1
|
||||||
|
./test-milter -C 1 -a "554 5.7.1 1% 2%% 3%%%" -c header -p inet:9999@127.0.0.1
|
||||||
|
./test-milter -C 1 -a "554 5.7.1 1% 2%% 3%%%" -c eoh -p inet:9999@127.0.0.1
|
||||||
|
./test-milter -C 1 -a "554 5.7.1 1% 2%% 3%%%" -c body -p inet:9999@127.0.0.1
|
||||||
|
./test-milter -C 1 -a "554 5.7.1 1% 2%% 3%%%" -c eom -p inet:9999@127.0.0.1
|
||||||
|
|
||||||
# Tempfail tests
|
# Tempfail tests
|
||||||
./test-milter -C 1 -a tempfail -c connect -p inet:9999@127.0.0.1
|
./test-milter -C 1 -a tempfail -c connect -p inet:9999@127.0.0.1
|
||||||
./test-milter -C 1 -a tempfail -c helo -p inet:9999@127.0.0.1
|
./test-milter -C 1 -a tempfail -c helo -p inet:9999@127.0.0.1
|
||||||
|
@ -96,17 +96,23 @@ static char *reply_code;
|
|||||||
static char *reply_dsn;
|
static char *reply_dsn;
|
||||||
static char *reply_message;
|
static char *reply_message;
|
||||||
|
|
||||||
|
#ifdef SMFIR_INSHEADER
|
||||||
static char *ins_hdr;
|
static char *ins_hdr;
|
||||||
static int ins_idx;
|
static int ins_idx;
|
||||||
static char *ins_val;
|
static char *ins_val;
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef SMFIR_CHGHEADER
|
||||||
static char *chg_hdr;
|
static char *chg_hdr;
|
||||||
static int chg_idx;
|
static int chg_idx;
|
||||||
static char *chg_val;
|
static char *chg_val;
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
static int test_reply(SMFICTX *ctx, int code)
|
static int test_reply(SMFICTX *ctx, int code)
|
||||||
{
|
{
|
||||||
(void) fflush(stdout); /* In case output redirected. */
|
(void) fflush(stdout); /* In case output redirected. */
|
||||||
|
|
||||||
if (code == SMFIR_REPLYCODE) {
|
if (code == SMFIR_REPLYCODE) {
|
||||||
if (smfi_setreply(ctx, reply_code, reply_dsn, reply_message) != MI_SUCCESS)
|
if (smfi_setreply(ctx, reply_code, reply_dsn, reply_message) != MI_SUCCESS)
|
||||||
@ -214,10 +220,14 @@ static sfsistat test_body(SMFICTX *ctx, unsigned char *data, size_t data_len)
|
|||||||
static sfsistat test_eom(SMFICTX *ctx)
|
static sfsistat test_eom(SMFICTX *ctx)
|
||||||
{
|
{
|
||||||
printf("test_eom\n");
|
printf("test_eom\n");
|
||||||
|
#ifdef SMFIR_INSHEADER
|
||||||
if (ins_hdr && smfi_insheader(ctx, ins_idx, ins_hdr, ins_val) == MI_FAILURE)
|
if (ins_hdr && smfi_insheader(ctx, ins_idx, ins_hdr, ins_val) == MI_FAILURE)
|
||||||
fprintf(stderr, "smfi_insheader failed");
|
fprintf(stderr, "smfi_insheader failed");
|
||||||
|
#endif
|
||||||
|
#ifdef SMFIR_CHGHEADER
|
||||||
if (chg_hdr && smfi_chgheader(ctx, chg_hdr, chg_idx, chg_val) == MI_FAILURE)
|
if (chg_hdr && smfi_chgheader(ctx, chg_hdr, chg_idx, chg_val) == MI_FAILURE)
|
||||||
fprintf(stderr, "smfi_chgheader failed");
|
fprintf(stderr, "smfi_chgheader failed");
|
||||||
|
#endif
|
||||||
return (test_reply(ctx, test_eom_reply));
|
return (test_reply(ctx, test_eom_reply));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -319,11 +329,16 @@ int main(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'i':
|
case 'i':
|
||||||
|
#ifdef SMFIR_INSHEADER
|
||||||
if (ins_hdr) {
|
if (ins_hdr) {
|
||||||
fprintf(stderr, "too many -i options\n");
|
fprintf(stderr, "too many -i options\n");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
parse_hdr_info(optarg, &ins_idx, &ins_hdr, &ins_val);
|
parse_hdr_info(optarg, &ins_idx, &ins_hdr, &ins_val);
|
||||||
|
#else
|
||||||
|
fprintf(stderr, "no libmilter support to insert header\n");
|
||||||
|
exit(1);
|
||||||
|
#endif
|
||||||
break;
|
break;
|
||||||
case 'p':
|
case 'p':
|
||||||
if (smfi_setconn(optarg) == MI_FAILURE) {
|
if (smfi_setconn(optarg) == MI_FAILURE) {
|
||||||
@ -332,11 +347,16 @@ int main(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'r':
|
case 'r':
|
||||||
|
#ifdef SMFIR_CHGHEADER
|
||||||
if (chg_hdr) {
|
if (chg_hdr) {
|
||||||
fprintf(stderr, "too many -r options\n");
|
fprintf(stderr, "too many -r options\n");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
parse_hdr_info(optarg, &chg_idx, &chg_hdr, &chg_val);
|
parse_hdr_info(optarg, &chg_idx, &chg_hdr, &chg_val);
|
||||||
|
#else
|
||||||
|
fprintf(stderr, "no libmilter support to change header\n");
|
||||||
|
exit(1);
|
||||||
|
#endif
|
||||||
break;
|
break;
|
||||||
case 'v':
|
case 'v':
|
||||||
verbose++;
|
verbose++;
|
||||||
|
@ -221,9 +221,7 @@ static int copy_segment(VSTREAM *qfile, VSTREAM *cleanup, PICKUP_INFO *info,
|
|||||||
* mail system against unreasonable inputs. This also requires that we
|
* mail system against unreasonable inputs. This also requires that we
|
||||||
* limit the size of envelope records written by the local posting agent.
|
* limit the size of envelope records written by the local posting agent.
|
||||||
*
|
*
|
||||||
* Allow attribute records if the queue file is owned by the mail system
|
* Records with named attributes are filtered by postdrop(1).
|
||||||
* (postsuper -r) or if the attribute specifies the MIME body type
|
|
||||||
* (sendmail -B).
|
|
||||||
*
|
*
|
||||||
* We must allow PTR records here because of "postsuper -r".
|
* We must allow PTR records here because of "postsuper -r".
|
||||||
*/
|
*/
|
||||||
@ -249,6 +247,8 @@ static int copy_segment(VSTREAM *qfile, VSTREAM *cleanup, PICKUP_INFO *info,
|
|||||||
/*
|
/*
|
||||||
* XXX Workaround: REC_TYPE_FILT (used in envelopes) == REC_TYPE_CONT
|
* XXX Workaround: REC_TYPE_FILT (used in envelopes) == REC_TYPE_CONT
|
||||||
* (used in message content).
|
* (used in message content).
|
||||||
|
*
|
||||||
|
* As documented in postsuper(1), ignore content filter record.
|
||||||
*/
|
*/
|
||||||
if (*expected != REC_TYPE_CONTENT[0]) {
|
if (*expected != REC_TYPE_CONTENT[0]) {
|
||||||
if (type == REC_TYPE_FILT)
|
if (type == REC_TYPE_FILT)
|
||||||
@ -322,7 +322,7 @@ static int pickup_copy(VSTREAM *qfile, VSTREAM *cleanup,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Add content inspection transport.
|
* Add content inspection transport. See also postsuper(1).
|
||||||
*/
|
*/
|
||||||
if (*var_filter_xport)
|
if (*var_filter_xport)
|
||||||
rec_fprintf(cleanup, REC_TYPE_FILT, "%s", var_filter_xport);
|
rec_fprintf(cleanup, REC_TYPE_FILT, "%s", var_filter_xport);
|
||||||
@ -344,7 +344,10 @@ static int pickup_copy(VSTREAM *qfile, VSTREAM *cleanup,
|
|||||||
* For messages belonging to $mail_owner also log the maildrop queue id.
|
* For messages belonging to $mail_owner also log the maildrop queue id.
|
||||||
* This supports message tracking for mail requeued via "postsuper -r".
|
* This supports message tracking for mail requeued via "postsuper -r".
|
||||||
*/
|
*/
|
||||||
if (info->st.st_uid == var_owner_uid) {
|
#define MAIL_IS_REQUEUED(info) \
|
||||||
|
((info)->st.st_uid == var_owner_uid && ((info)->st.st_mode & S_IROTH) == 0)
|
||||||
|
|
||||||
|
if (MAIL_IS_REQUEUED(info)) {
|
||||||
msg_info("%s: uid=%d from=<%s> orig_id=%s", info->id,
|
msg_info("%s: uid=%d from=<%s> orig_id=%s", info->id,
|
||||||
(int) info->st.st_uid, info->sender,
|
(int) info->st.st_uid, info->sender,
|
||||||
((name = strrchr(info->path, '/')) != 0 ?
|
((name = strrchr(info->path, '/')) != 0 ?
|
||||||
@ -442,6 +445,13 @@ static int pickup_file(PICKUP_INFO *info)
|
|||||||
* bounces its copy of the message. because the original input file is
|
* bounces its copy of the message. because the original input file is
|
||||||
* not readable by the bounce service.
|
* not readable by the bounce service.
|
||||||
*
|
*
|
||||||
|
* If mail is re-injected with "postsuper -r", disable Milter applications.
|
||||||
|
* If they were run before the mail was queued then there is no need to
|
||||||
|
* run them again. Moreover, the queue file does not contain enough
|
||||||
|
* information to reproduce the exact same SMTP events and Sendmail
|
||||||
|
* macros that Milters received when the mail originally arrived in
|
||||||
|
* Postfix.
|
||||||
|
*
|
||||||
* The actual message copying code is in a separate routine, so that it is
|
* The actual message copying code is in a separate routine, so that it is
|
||||||
* easier to implement the many possible error exits without forgetting
|
* easier to implement the many possible error exits without forgetting
|
||||||
* to close files, or to release memory.
|
* to close files, or to release memory.
|
||||||
@ -449,6 +459,9 @@ static int pickup_file(PICKUP_INFO *info)
|
|||||||
cleanup_flags =
|
cleanup_flags =
|
||||||
input_transp_cleanup(CLEANUP_FLAG_BOUNCE | CLEANUP_FLAG_MASK_EXTERNAL,
|
input_transp_cleanup(CLEANUP_FLAG_BOUNCE | CLEANUP_FLAG_MASK_EXTERNAL,
|
||||||
pickup_input_transp_mask);
|
pickup_input_transp_mask);
|
||||||
|
/* As documented in postsuper(1). */
|
||||||
|
if (MAIL_IS_REQUEUED(info))
|
||||||
|
cleanup_flags &= ~CLEANUP_FLAG_MILTER;
|
||||||
|
|
||||||
cleanup = mail_connect_wait(MAIL_CLASS_PUBLIC, var_cleanup_service);
|
cleanup = mail_connect_wait(MAIL_CLASS_PUBLIC, var_cleanup_service);
|
||||||
if (attr_scan(cleanup, ATTR_FLAG_STRICT,
|
if (attr_scan(cleanup, ATTR_FLAG_STRICT,
|
||||||
|
@ -239,6 +239,14 @@
|
|||||||
/* P.O. Box 704
|
/* P.O. Box 704
|
||||||
/* Yorktown Heights, NY 10598, USA
|
/* Yorktown Heights, NY 10598, USA
|
||||||
/*
|
/*
|
||||||
|
/* TLS support by:
|
||||||
|
/* Lutz Jaenicke
|
||||||
|
/* Brandenburg University of Technology
|
||||||
|
/* Cottbus, Germany
|
||||||
|
/*
|
||||||
|
/* Victor Duchovni
|
||||||
|
/* Morgan Stanley
|
||||||
|
/*
|
||||||
/* SASL support originally by:
|
/* SASL support originally by:
|
||||||
/* Till Franke
|
/* Till Franke
|
||||||
/* SuSE Rhein/Main AG
|
/* SuSE Rhein/Main AG
|
||||||
|
@ -121,13 +121,31 @@
|
|||||||
/* Specify \fB-r ALL\fR to requeue all messages. As a safety
|
/* Specify \fB-r ALL\fR to requeue all messages. As a safety
|
||||||
/* measure, the word \fBALL\fR must be specified in upper case.
|
/* measure, the word \fBALL\fR must be specified in upper case.
|
||||||
/* .sp
|
/* .sp
|
||||||
/* A requeued message is moved to the \fBmaildrop\fR queue, from
|
/* A requeued message is moved to the \fBmaildrop\fR queue,
|
||||||
/* where it is copied by the pickup daemon to a new file whose name
|
/* from where it is copied by the \fBpickup\fR(8) and
|
||||||
/* is guaranteed to match the new queue file inode number. The
|
/* \fBcleanup\fR(8) daemons to a new queue file. In many
|
||||||
/* new queue file is subjected again to mail address rewriting and
|
/* respects its handling differs from that of a new local
|
||||||
/* substitution. This is useful when rewriting rules or virtual
|
/* submission.
|
||||||
/* mappings have changed.
|
/* .RS
|
||||||
|
/* .IP \(bu
|
||||||
|
/* The message is not subjected to the smtpd_milters or
|
||||||
|
/* non_smtpd_milters settings. When mail has passed through
|
||||||
|
/* an external content filter, this would produce incorrect
|
||||||
|
/* results with Milter applications that depend on original
|
||||||
|
/* SMTP connection state information.
|
||||||
|
/* .IP \(bu
|
||||||
|
/* The message is subjected again to mail address rewriting
|
||||||
|
/* and substitution. This is useful when rewriting rules or
|
||||||
|
/* virtual mappings have changed.
|
||||||
/* .sp
|
/* .sp
|
||||||
|
/* The address rewriting context (local or remote) is the same
|
||||||
|
/* as when the message was received.
|
||||||
|
/* .IP \(bu
|
||||||
|
/* The message is subjected to the same content_filter settings
|
||||||
|
/* (if any) as used for new local mail submissions. This is
|
||||||
|
/* useful when content_filter settings have changed.
|
||||||
|
/* .RE
|
||||||
|
/* .IP
|
||||||
/* Warning: Postfix queue IDs are reused.
|
/* Warning: Postfix queue IDs are reused.
|
||||||
/* There is a very small possibility that \fBpostsuper\fR(1) requeues
|
/* There is a very small possibility that \fBpostsuper\fR(1) requeues
|
||||||
/* the wrong message file when it is executed while the Postfix mail
|
/* the wrong message file when it is executed while the Postfix mail
|
||||||
|
@ -95,6 +95,5 @@
|
|||||||
#endif
|
#endif
|
||||||
VAR_LMTP_SENDER_AUTH, DEF_LMTP_SENDER_AUTH, &var_smtp_sender_auth,
|
VAR_LMTP_SENDER_AUTH, DEF_LMTP_SENDER_AUTH, &var_smtp_sender_auth,
|
||||||
VAR_LMTP_CNAME_OVERR, DEF_LMTP_CNAME_OVERR, &var_smtp_cname_overr,
|
VAR_LMTP_CNAME_OVERR, DEF_LMTP_CNAME_OVERR, &var_smtp_cname_overr,
|
||||||
VAR_LMTP_SASL_ENFORCE, DEF_LMTP_SASL_ENFORCE, &var_smtp_sasl_enforce,
|
|
||||||
0,
|
0,
|
||||||
};
|
};
|
||||||
|
@ -234,11 +234,6 @@
|
|||||||
/* server's list of offered SASL mechanisms.
|
/* server's list of offered SASL mechanisms.
|
||||||
/* .PP
|
/* .PP
|
||||||
/* Available in Postfix version 2.3 and later:
|
/* Available in Postfix version 2.3 and later:
|
||||||
/* .IP "\fBsmtp_sasl_auth_enforce (yes)\fR"
|
|
||||||
/* If sender-dependent SASL passwords are turned off, defer mail
|
|
||||||
/* delivery when an SMTP server does not support SASL authentication,
|
|
||||||
/* while smtp_sasl_password_maps contains SASL login/password information
|
|
||||||
/* for that server.
|
|
||||||
/* .IP "\fBsmtp_sender_dependent_authentication (no)\fR"
|
/* .IP "\fBsmtp_sender_dependent_authentication (no)\fR"
|
||||||
/* Enable sender-dependent authentication in the Postfix SMTP client; this is
|
/* Enable sender-dependent authentication in the Postfix SMTP client; this is
|
||||||
/* available only with SASL authentication, and disables SMTP connection
|
/* available only with SASL authentication, and disables SMTP connection
|
||||||
@ -297,6 +292,13 @@
|
|||||||
/* .IP "\fBsmtp_tls_note_starttls_offer (no)\fR"
|
/* .IP "\fBsmtp_tls_note_starttls_offer (no)\fR"
|
||||||
/* Log the hostname of a remote SMTP server that offers STARTTLS,
|
/* Log the hostname of a remote SMTP server that offers STARTTLS,
|
||||||
/* when TLS is not already enabled for that server.
|
/* when TLS is not already enabled for that server.
|
||||||
|
/* .IP "\fBsmtp_tls_policy_maps (empty)\fR"
|
||||||
|
/* Optional lookup tables with the Postfix SMTP client TLS security
|
||||||
|
/* policy by next-hop destination; when a non-empty value is specified,
|
||||||
|
/* this overrides the obsolete smtp_tls_per_site parameter.
|
||||||
|
/* .IP "\fBsmtp_tls_mandatory_protocols (SSLv3, TLSv1)\fR"
|
||||||
|
/* List of TLS protocols that the Postfix SMTP client will use
|
||||||
|
/* with mandatory TLS encryption.
|
||||||
/* .IP "\fBsmtp_tls_scert_verifydepth (5)\fR"
|
/* .IP "\fBsmtp_tls_scert_verifydepth (5)\fR"
|
||||||
/* The verification depth for remote SMTP server certificates.
|
/* The verification depth for remote SMTP server certificates.
|
||||||
/* .IP "\fBsmtp_tls_secure_cert_match (nexthop, dot-nexthop)\fR"
|
/* .IP "\fBsmtp_tls_secure_cert_match (nexthop, dot-nexthop)\fR"
|
||||||
@ -697,7 +699,6 @@ bool var_smtp_sender_auth;
|
|||||||
char *var_lmtp_tcp_port;
|
char *var_lmtp_tcp_port;
|
||||||
int var_scache_proto_tmout;
|
int var_scache_proto_tmout;
|
||||||
bool var_smtp_cname_overr;
|
bool var_smtp_cname_overr;
|
||||||
bool var_smtp_sasl_enforce;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Global variables.
|
* Global variables.
|
||||||
|
@ -99,6 +99,5 @@
|
|||||||
#endif
|
#endif
|
||||||
VAR_SMTP_SENDER_AUTH, DEF_SMTP_SENDER_AUTH, &var_smtp_sender_auth,
|
VAR_SMTP_SENDER_AUTH, DEF_SMTP_SENDER_AUTH, &var_smtp_sender_auth,
|
||||||
VAR_SMTP_CNAME_OVERR, DEF_SMTP_CNAME_OVERR, &var_smtp_cname_overr,
|
VAR_SMTP_CNAME_OVERR, DEF_SMTP_CNAME_OVERR, &var_smtp_cname_overr,
|
||||||
VAR_SMTP_SASL_ENFORCE, DEF_SMTP_SASL_ENFORCE, &var_smtp_sasl_enforce,
|
|
||||||
0,
|
0,
|
||||||
};
|
};
|
||||||
|
@ -359,7 +359,6 @@ int smtp_helo(SMTP_STATE *state)
|
|||||||
"host %s refused to talk to me: %s",
|
"host %s refused to talk to me: %s",
|
||||||
session->namaddr,
|
session->namaddr,
|
||||||
translit(resp->str, "\n", " ")));
|
translit(resp->str, "\n", " ")));
|
||||||
return (0);
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
where = "performing the LHLO handshake";
|
where = "performing the LHLO handshake";
|
||||||
@ -372,93 +371,106 @@ int smtp_helo(SMTP_STATE *state)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Determine what server EHLO keywords to ignore, typically to avoid
|
* No early returns allowed, to ensure consistent handling of TLS and
|
||||||
* inter-operability problems.
|
* SASL policies.
|
||||||
*/
|
*/
|
||||||
if (smtp_ehlo_dis_maps == 0
|
if (session->features & SMTP_FEATURE_ESMTP) {
|
||||||
|| (ehlo_words = maps_find(smtp_ehlo_dis_maps, state->session->addr, 0)) == 0)
|
|
||||||
ehlo_words = var_smtp_ehlo_dis_words;
|
|
||||||
discard_mask = ehlo_mask(ehlo_words);
|
|
||||||
if (discard_mask && !(discard_mask & EHLO_MASK_SILENT))
|
|
||||||
msg_info("discarding EHLO keywords: %s", str_ehlo_mask(discard_mask));
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Pick up some useful features offered by the SMTP server. XXX Until we
|
* Determine what server EHLO keywords to ignore, typically to avoid
|
||||||
* have a portable routine to convert from string to off_t with proper
|
* inter-operability problems.
|
||||||
* overflow detection, ignore the message size limit advertised by the
|
*/
|
||||||
* SMTP server. Otherwise, we might do the wrong thing when the server
|
if (smtp_ehlo_dis_maps == 0
|
||||||
* advertises a really huge message size limit.
|
|| (ehlo_words = maps_find(smtp_ehlo_dis_maps,
|
||||||
*
|
state->session->addr, 0)) == 0)
|
||||||
* XXX Allow for "code (SP|-) ehlo-keyword (SP|=) ehlo-param...", because
|
ehlo_words = var_smtp_ehlo_dis_words;
|
||||||
* MicroSoft implemented AUTH based on an old draft.
|
discard_mask = ehlo_mask(ehlo_words);
|
||||||
*/
|
if (discard_mask && !(discard_mask & EHLO_MASK_SILENT))
|
||||||
lines = resp->str;
|
msg_info("discarding EHLO keywords: %s",
|
||||||
for (n = 0; (words = mystrtok(&lines, "\n")) != 0; /* see below */ ) {
|
str_ehlo_mask(discard_mask));
|
||||||
if (mystrtok(&words, "- ") && (word = mystrtok(&words, " \t=")) != 0) {
|
|
||||||
if (n == 0) {
|
|
||||||
if (session->helo != 0)
|
|
||||||
myfree(session->helo);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* XXX: Keep the original case: we don't expect a single SMTP
|
* Pick up some useful features offered by the SMTP server. XXX Until
|
||||||
* server to randomly change the case of its helo response.
|
* we have a portable routine to convert from string to off_t with
|
||||||
* If different capitalization is detected, we should assume
|
* proper overflow detection, ignore the message size limit
|
||||||
* disjoint TLS caches.
|
* advertised by the SMTP server. Otherwise, we might do the wrong
|
||||||
*/
|
* thing when the server advertises a really huge message size limit.
|
||||||
session->helo = mystrdup(word);
|
*
|
||||||
if (strcasecmp(word, var_myhostname) == 0
|
* XXX Allow for "code (SP|-) ehlo-keyword (SP|=) ehlo-param...",
|
||||||
&& (state->misc_flags & SMTP_MISC_FLAG_LOOP_DETECT) != 0) {
|
* because MicroSoft implemented AUTH based on an old draft.
|
||||||
msg_warn("host %s replied to HELO/EHLO with my own hostname %s",
|
*/
|
||||||
session->namaddrport, var_myhostname);
|
lines = resp->str;
|
||||||
if (session->features & SMTP_FEATURE_BEST_MX)
|
for (n = 0; (words = mystrtok(&lines, "\n")) != 0; /* see below */ ) {
|
||||||
return (smtp_site_fail(state, DSN_BY_LOCAL_MTA,
|
if (mystrtok(&words, "- ")
|
||||||
|
&& (word = mystrtok(&words, " \t=")) != 0) {
|
||||||
|
if (n == 0) {
|
||||||
|
if (session->helo != 0)
|
||||||
|
myfree(session->helo);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* XXX: Keep the original case: we don't expect a single
|
||||||
|
* SMTP server to randomly change the case of its helo
|
||||||
|
* response. If different capitalization is detected, we
|
||||||
|
* should assume disjoint TLS caches.
|
||||||
|
*/
|
||||||
|
session->helo = mystrdup(word);
|
||||||
|
if (strcasecmp(word, var_myhostname) == 0
|
||||||
|
&& (state->misc_flags & SMTP_MISC_FLAG_LOOP_DETECT) != 0) {
|
||||||
|
msg_warn("host %s replied to HELO/EHLO"
|
||||||
|
" with my own hostname %s",
|
||||||
|
session->namaddrport, var_myhostname);
|
||||||
|
if (session->features & SMTP_FEATURE_BEST_MX)
|
||||||
|
return (smtp_site_fail(state, DSN_BY_LOCAL_MTA,
|
||||||
SMTP_RESP_FAKE(&fake, "5.4.6"),
|
SMTP_RESP_FAKE(&fake, "5.4.6"),
|
||||||
"mail for %s loops back to myself",
|
"mail for %s loops back to myself",
|
||||||
request->nexthop));
|
request->nexthop));
|
||||||
else
|
else
|
||||||
return (smtp_site_fail(state, DSN_BY_LOCAL_MTA,
|
return (smtp_site_fail(state, DSN_BY_LOCAL_MTA,
|
||||||
SMTP_RESP_FAKE(&fake, "4.4.6"),
|
SMTP_RESP_FAKE(&fake, "4.4.6"),
|
||||||
"mail for %s loops back to myself",
|
"mail for %s loops back to myself",
|
||||||
request->nexthop));
|
request->nexthop));
|
||||||
}
|
}
|
||||||
} else if (strcasecmp(word, "8BITMIME") == 0) {
|
} else if (strcasecmp(word, "8BITMIME") == 0) {
|
||||||
if ((discard_mask & EHLO_MASK_8BITMIME) == 0)
|
if ((discard_mask & EHLO_MASK_8BITMIME) == 0)
|
||||||
session->features |= SMTP_FEATURE_8BITMIME;
|
session->features |= SMTP_FEATURE_8BITMIME;
|
||||||
} else if (strcasecmp(word, "PIPELINING") == 0) {
|
} else if (strcasecmp(word, "PIPELINING") == 0) {
|
||||||
if ((discard_mask & EHLO_MASK_PIPELINING) == 0)
|
if ((discard_mask & EHLO_MASK_PIPELINING) == 0)
|
||||||
session->features |= SMTP_FEATURE_PIPELINING;
|
session->features |= SMTP_FEATURE_PIPELINING;
|
||||||
} else if (strcasecmp(word, "XFORWARD") == 0) {
|
} else if (strcasecmp(word, "XFORWARD") == 0) {
|
||||||
if ((discard_mask & EHLO_MASK_XFORWARD) == 0)
|
if ((discard_mask & EHLO_MASK_XFORWARD) == 0)
|
||||||
while ((word = mystrtok(&words, " \t")) != 0)
|
while ((word = mystrtok(&words, " \t")) != 0)
|
||||||
session->features |= name_code(xforward_features,
|
session->features |=
|
||||||
NAME_CODE_FLAG_NONE, word);
|
name_code(xforward_features,
|
||||||
} else if (strcasecmp(word, "SIZE") == 0) {
|
NAME_CODE_FLAG_NONE, word);
|
||||||
if ((discard_mask & EHLO_MASK_SIZE) == 0) {
|
} else if (strcasecmp(word, "SIZE") == 0) {
|
||||||
session->features |= SMTP_FEATURE_SIZE;
|
if ((discard_mask & EHLO_MASK_SIZE) == 0) {
|
||||||
if ((word = mystrtok(&words, " \t")) != 0) {
|
session->features |= SMTP_FEATURE_SIZE;
|
||||||
if (!alldig(word))
|
if ((word = mystrtok(&words, " \t")) != 0) {
|
||||||
msg_warn("bad EHLO SIZE limit \"%s\" from %s",
|
if (!alldig(word))
|
||||||
word, session->namaddrport);
|
msg_warn("bad EHLO SIZE limit \"%s\" from %s",
|
||||||
else
|
word, session->namaddrport);
|
||||||
session->size_limit = off_cvt_string(word);
|
else
|
||||||
|
session->size_limit = off_cvt_string(word);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
#ifdef USE_TLS
|
#ifdef USE_TLS
|
||||||
} else if (strcasecmp(word, "STARTTLS") == 0) {
|
} else if (strcasecmp(word, "STARTTLS") == 0) {
|
||||||
/* Ignored later if we already sent STARTTLS. */
|
/* Ignored later if we already sent STARTTLS. */
|
||||||
if ((discard_mask & EHLO_MASK_STARTTLS) == 0)
|
if ((discard_mask & EHLO_MASK_STARTTLS) == 0)
|
||||||
session->features |= SMTP_FEATURE_STARTTLS;
|
session->features |= SMTP_FEATURE_STARTTLS;
|
||||||
#endif
|
#endif
|
||||||
#ifdef USE_SASL_AUTH
|
#ifdef USE_SASL_AUTH
|
||||||
} else if (var_smtp_sasl_enable && strcasecmp(word, "AUTH") == 0) {
|
} else if (var_smtp_sasl_enable
|
||||||
if ((discard_mask & EHLO_MASK_AUTH) == 0)
|
&& strcasecmp(word, "AUTH") == 0) {
|
||||||
smtp_sasl_helo_auth(session, words);
|
if ((discard_mask & EHLO_MASK_AUTH) == 0)
|
||||||
|
smtp_sasl_helo_auth(session, words);
|
||||||
#endif
|
#endif
|
||||||
} else if (strcasecmp(word, "DSN") == 0) {
|
} else if (strcasecmp(word, "DSN") == 0) {
|
||||||
if ((discard_mask & EHLO_MASK_DSN) == 0)
|
if ((discard_mask & EHLO_MASK_DSN) == 0)
|
||||||
session->features |= SMTP_FEATURE_DSN;
|
session->features |= SMTP_FEATURE_DSN;
|
||||||
|
}
|
||||||
|
n++;
|
||||||
}
|
}
|
||||||
n++;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (msg_verbose)
|
if (msg_verbose)
|
||||||
@ -600,16 +612,6 @@ int smtp_helo(SMTP_STATE *state)
|
|||||||
#ifdef USE_SASL_AUTH
|
#ifdef USE_SASL_AUTH
|
||||||
if (var_smtp_sasl_enable && (session->features & SMTP_FEATURE_AUTH))
|
if (var_smtp_sasl_enable && (session->features & SMTP_FEATURE_AUTH))
|
||||||
return (smtp_sasl_helo_login(state));
|
return (smtp_sasl_helo_login(state));
|
||||||
else if (var_smtp_sasl_enable
|
|
||||||
&& *var_smtp_sasl_passwd
|
|
||||||
&& !var_smtp_sender_auth
|
|
||||||
&& var_smtp_sasl_enforce
|
|
||||||
&& smtp_sasl_passwd_lookup(session) != 0)
|
|
||||||
return (smtp_site_fail(state, DSN_BY_LOCAL_MTA,
|
|
||||||
SMTP_RESP_FAKE(&fake, "4.7.0"),
|
|
||||||
"SASL login/password exists, but host %s "
|
|
||||||
"does not announce SASL authentication support",
|
|
||||||
session->namaddr));
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return (0);
|
return (0);
|
||||||
@ -744,11 +746,22 @@ static int smtp_start_tls(SMTP_STATE *state)
|
|||||||
DONT_USE_DEAD_SESSION;
|
DONT_USE_DEAD_SESSION;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If TLS is optional, try again, this time without TLS.
|
* If TLS is optional, try delivery to the same server over a
|
||||||
* Specifically, this session is not final, don't defer any
|
* plaintext connection. Otherwise we would defer mail forever with
|
||||||
* recipients yet.
|
* destinations that have no alternate MX host.
|
||||||
|
*
|
||||||
|
* Don't fall back to plaintext if we were willing to use SASL-over-TLS
|
||||||
|
* authentication. If the server doesn't announce SASL support over
|
||||||
|
* plaintext connections, then we don't want delivery to fail with
|
||||||
|
* "relay access denied".
|
||||||
*/
|
*/
|
||||||
if (session->tls_level == TLS_LEV_MAY)
|
if (session->tls_level == TLS_LEV_MAY
|
||||||
|
#ifdef USE_SASL_AUTH
|
||||||
|
&& !(var_smtp_sasl_enable
|
||||||
|
&& *var_smtp_sasl_passwd
|
||||||
|
&& smtp_sasl_passwd_lookup(session))
|
||||||
|
#endif
|
||||||
|
)
|
||||||
RETRY_AS_PLAINTEXT;
|
RETRY_AS_PLAINTEXT;
|
||||||
return (smtp_site_fail(state, DSN_BY_LOCAL_MTA,
|
return (smtp_site_fail(state, DSN_BY_LOCAL_MTA,
|
||||||
SMTP_RESP_FAKE(&fake, "4.7.5"),
|
SMTP_RESP_FAKE(&fake, "4.7.5"),
|
||||||
|
@ -175,9 +175,13 @@ int smtp_sasl_passwd_lookup(SMTP_SESSION *session)
|
|||||||
&& (value = mail_addr_find(smtp_sasl_passwd_map,
|
&& (value = mail_addr_find(smtp_sasl_passwd_map,
|
||||||
state->request->sender, (char **) 0)) != 0)
|
state->request->sender, (char **) 0)) != 0)
|
||||||
|| (value = maps_find(smtp_sasl_passwd_map, session->host, 0)) != 0
|
|| (value = maps_find(smtp_sasl_passwd_map, session->host, 0)) != 0
|
||||||
|| (value = maps_find(smtp_sasl_passwd_map, session->dest, 0)) != 0) {
|
|| (value = maps_find(smtp_sasl_passwd_map, session->dest, 0)) != 0) {
|
||||||
|
if (session->sasl_username)
|
||||||
|
myfree(session->sasl_username);
|
||||||
session->sasl_username = mystrdup(value);
|
session->sasl_username = mystrdup(value);
|
||||||
passwd = split_at(session->sasl_username, ':');
|
passwd = split_at(session->sasl_username, ':');
|
||||||
|
if (session->sasl_passwd)
|
||||||
|
myfree(session->sasl_passwd);
|
||||||
session->sasl_passwd = mystrdup(passwd ? passwd : "");
|
session->sasl_passwd = mystrdup(passwd ? passwd : "");
|
||||||
if (msg_verbose)
|
if (msg_verbose)
|
||||||
msg_info("%s: host `%s' user `%s' pass `%s'",
|
msg_info("%s: host `%s' user `%s' pass `%s'",
|
||||||
|
@ -108,6 +108,12 @@
|
|||||||
/* .IP "\fBsmtpd_delay_open_until_valid_rcpt (yes)\fR"
|
/* .IP "\fBsmtpd_delay_open_until_valid_rcpt (yes)\fR"
|
||||||
/* Postpone the start of an SMTP mail transaction until a valid
|
/* Postpone the start of an SMTP mail transaction until a valid
|
||||||
/* RCPT TO command is received.
|
/* RCPT TO command is received.
|
||||||
|
/* .PP
|
||||||
|
/* Available in Postfix version 2.3 and later:
|
||||||
|
/* .IP "\fBsmtpd_tls_always_issue_session_ids (yes)\fR"
|
||||||
|
/* Force the Postfix SMTP server to issue a TLS session id, even
|
||||||
|
/* when TLS session caching is turned off (smtpd_tls_session_cache_database
|
||||||
|
/* is empty).
|
||||||
/* ADDRESS REWRITING CONTROLS
|
/* ADDRESS REWRITING CONTROLS
|
||||||
/* .ad
|
/* .ad
|
||||||
/* .fi
|
/* .fi
|
||||||
@ -278,6 +284,10 @@
|
|||||||
/* .IP "\fBsmtpd_tls_CAfile (empty)\fR"
|
/* .IP "\fBsmtpd_tls_CAfile (empty)\fR"
|
||||||
/* The file with the certificate of the certification authority
|
/* The file with the certificate of the certification authority
|
||||||
/* (CA) that issued the Postfix SMTP server certificate.
|
/* (CA) that issued the Postfix SMTP server certificate.
|
||||||
|
/* .IP "\fBsmtpd_tls_always_issue_session_ids (yes)\fR"
|
||||||
|
/* Force the Postfix SMTP server to issue a TLS session id, even
|
||||||
|
/* when TLS session caching is turned off (smtpd_tls_session_cache_database
|
||||||
|
/* is empty).
|
||||||
/* .IP "\fBsmtpd_tls_ask_ccert (no)\fR"
|
/* .IP "\fBsmtpd_tls_ask_ccert (no)\fR"
|
||||||
/* Ask a remote SMTP client for a client certificate.
|
/* Ask a remote SMTP client for a client certificate.
|
||||||
/* .IP "\fBsmtpd_tls_auth_only (no)\fR"
|
/* .IP "\fBsmtpd_tls_auth_only (no)\fR"
|
||||||
@ -520,7 +530,7 @@
|
|||||||
/* .PP
|
/* .PP
|
||||||
/* Available in Postfix version 2.3 and later:
|
/* Available in Postfix version 2.3 and later:
|
||||||
/* .IP "\fBsmtpd_peername_lookup (yes)\fR"
|
/* .IP "\fBsmtpd_peername_lookup (yes)\fR"
|
||||||
/* Attempt to look up the Postfix SMTP client hostname, and verify that
|
/* Attempt to look up the remote SMTP client hostname, and verify that
|
||||||
/* the name matches the client IP address.
|
/* the name matches the client IP address.
|
||||||
/* .PP
|
/* .PP
|
||||||
/* The per SMTP client connection count and request rate limits are
|
/* The per SMTP client connection count and request rate limits are
|
||||||
@ -1070,6 +1080,7 @@ char *var_smtpd_tls_mand_proto;
|
|||||||
bool var_smtpd_tls_received_header;
|
bool var_smtpd_tls_received_header;
|
||||||
bool var_smtpd_tls_req_ccert;
|
bool var_smtpd_tls_req_ccert;
|
||||||
int var_smtpd_tls_scache_timeout;
|
int var_smtpd_tls_scache_timeout;
|
||||||
|
bool var_smtpd_tls_set_sessid;
|
||||||
int var_tls_daemon_rand_bytes;
|
int var_tls_daemon_rand_bytes;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@ -1520,7 +1531,7 @@ static void helo_reset(SMTPD_STATE *state)
|
|||||||
if (state->helo_name) {
|
if (state->helo_name) {
|
||||||
myfree(state->helo_name);
|
myfree(state->helo_name);
|
||||||
state->helo_name = 0;
|
state->helo_name = 0;
|
||||||
if (smtpd_milters)
|
if (SMTPD_STAND_ALONE(state) == 0 && smtpd_milters != 0)
|
||||||
milter_abort(smtpd_milters);
|
milter_abort(smtpd_milters);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1688,6 +1699,8 @@ static int mail_open_stream(SMTPD_STATE *state)
|
|||||||
*/
|
*/
|
||||||
rec_fprintf(state->cleanup, REC_TYPE_ATTR, "%s=%s",
|
rec_fprintf(state->cleanup, REC_TYPE_ATTR, "%s=%s",
|
||||||
MAIL_ATTR_ACT_CLIENT_NAME, state->name);
|
MAIL_ATTR_ACT_CLIENT_NAME, state->name);
|
||||||
|
rec_fprintf(state->cleanup, REC_TYPE_ATTR, "%s=%s",
|
||||||
|
MAIL_ATTR_ACT_REVERSE_CLIENT_NAME, state->reverse_name);
|
||||||
rec_fprintf(state->cleanup, REC_TYPE_ATTR, "%s=%s",
|
rec_fprintf(state->cleanup, REC_TYPE_ATTR, "%s=%s",
|
||||||
MAIL_ATTR_ACT_CLIENT_ADDR, state->addr);
|
MAIL_ATTR_ACT_CLIENT_ADDR, state->addr);
|
||||||
if (state->helo_name)
|
if (state->helo_name)
|
||||||
@ -2235,10 +2248,11 @@ static int rcpt_cmd(SMTPD_STATE *state, int argc, SMTPD_TOKEN *argv)
|
|||||||
smtpd_chat_reply(state, "501 5.7.1 DSN support is disabled");
|
smtpd_chat_reply(state, "501 5.7.1 DSN support is disabled");
|
||||||
return (-1);
|
return (-1);
|
||||||
}
|
}
|
||||||
|
vstring_strcpy(state->dsn_orcpt_buf, arg + 6);
|
||||||
if (dsn_orcpt_addr
|
if (dsn_orcpt_addr
|
||||||
|| (coded_addr = split_at(arg + 6, ';')) == 0
|
|| (coded_addr = split_at(STR(state->dsn_orcpt_buf), ';')) == 0
|
||||||
|| xtext_unquote(state->dsn_buf, coded_addr) == 0
|
|| xtext_unquote(state->dsn_buf, coded_addr) == 0
|
||||||
|| *(dsn_orcpt_type = arg + 6) == 0) {
|
|| *(dsn_orcpt_type = STR(state->dsn_orcpt_buf)) == 0) {
|
||||||
state->error_mask |= MAIL_ERROR_PROTOCOL;
|
state->error_mask |= MAIL_ERROR_PROTOCOL;
|
||||||
smtpd_chat_reply(state,
|
smtpd_chat_reply(state,
|
||||||
"501 5.5.4 Error: Bad ORCPT parameter syntax");
|
"501 5.5.4 Error: Bad ORCPT parameter syntax");
|
||||||
@ -4218,6 +4232,7 @@ static void pre_jail_init(char *unused_name, char **unused_argv)
|
|||||||
props.verifydepth = var_smtpd_tls_ccert_vd;
|
props.verifydepth = var_smtpd_tls_ccert_vd;
|
||||||
props.cache_type = TLS_MGR_SCACHE_SMTPD;
|
props.cache_type = TLS_MGR_SCACHE_SMTPD;
|
||||||
props.scache_timeout = var_smtpd_tls_scache_timeout;
|
props.scache_timeout = var_smtpd_tls_scache_timeout;
|
||||||
|
props.set_sessid = var_smtpd_tls_set_sessid;
|
||||||
props.cert_file = var_smtpd_tls_cert_file;
|
props.cert_file = var_smtpd_tls_cert_file;
|
||||||
props.key_file = var_smtpd_tls_key_file;
|
props.key_file = var_smtpd_tls_key_file;
|
||||||
props.dcert_file = var_smtpd_tls_dcert_file;
|
props.dcert_file = var_smtpd_tls_dcert_file;
|
||||||
@ -4250,14 +4265,14 @@ static void pre_jail_init(char *unused_name, char **unused_argv)
|
|||||||
msg_warn("Can't require client certs unless TLS is required");
|
msg_warn("Can't require client certs unless TLS is required");
|
||||||
|
|
||||||
props.cipherlist =
|
props.cipherlist =
|
||||||
tls_cipher_list(enforce_tls ?
|
tls_cipher_list(enforce_tls ?
|
||||||
tls_cipher_level(var_smtpd_tls_mand_ciph) :
|
tls_cipher_level(var_smtpd_tls_mand_ciph) :
|
||||||
TLS_CIPHER_EXPORT,
|
TLS_CIPHER_EXPORT,
|
||||||
var_smtpd_tls_excl_ciph,
|
var_smtpd_tls_excl_ciph,
|
||||||
havecert ? "" : "aRSA aDSS",
|
havecert ? "" : "aRSA aDSS",
|
||||||
wantcert ? "aNULL" : "",
|
wantcert ? "aNULL" : "",
|
||||||
enforce_tls ? var_smtpd_tls_mand_excl :
|
enforce_tls ? var_smtpd_tls_mand_excl :
|
||||||
TLS_END_EXCLUDE,
|
TLS_END_EXCLUDE,
|
||||||
TLS_END_EXCLUDE);
|
TLS_END_EXCLUDE);
|
||||||
|
|
||||||
if (props.cipherlist == 0) {
|
if (props.cipherlist == 0) {
|
||||||
@ -4268,8 +4283,8 @@ static void pre_jail_init(char *unused_name, char **unused_argv)
|
|||||||
var_smtpd_tls_excl_ciph,
|
var_smtpd_tls_excl_ciph,
|
||||||
havecert ? "" : "aRSA aDSS",
|
havecert ? "" : "aRSA aDSS",
|
||||||
wantcert ? "aNULL" : "",
|
wantcert ? "aNULL" : "",
|
||||||
enforce_tls ? var_smtpd_tls_mand_excl :
|
enforce_tls ? var_smtpd_tls_mand_excl :
|
||||||
TLS_END_EXCLUDE,
|
TLS_END_EXCLUDE,
|
||||||
TLS_END_EXCLUDE);
|
TLS_END_EXCLUDE);
|
||||||
}
|
}
|
||||||
if (havecert || oknocert)
|
if (havecert || oknocert)
|
||||||
@ -4439,6 +4454,7 @@ int main(int argc, char **argv)
|
|||||||
VAR_SMTPD_TLS_ACERT, DEF_SMTPD_TLS_ACERT, &var_smtpd_tls_ask_ccert,
|
VAR_SMTPD_TLS_ACERT, DEF_SMTPD_TLS_ACERT, &var_smtpd_tls_ask_ccert,
|
||||||
VAR_SMTPD_TLS_RCERT, DEF_SMTPD_TLS_RCERT, &var_smtpd_tls_req_ccert,
|
VAR_SMTPD_TLS_RCERT, DEF_SMTPD_TLS_RCERT, &var_smtpd_tls_req_ccert,
|
||||||
VAR_SMTPD_TLS_RECHEAD, DEF_SMTPD_TLS_RECHEAD, &var_smtpd_tls_received_header,
|
VAR_SMTPD_TLS_RECHEAD, DEF_SMTPD_TLS_RECHEAD, &var_smtpd_tls_received_header,
|
||||||
|
VAR_SMTPD_TLS_SET_SESSID, DEF_SMTPD_TLS_SET_SESSID, &var_smtpd_tls_set_sessid,
|
||||||
#endif
|
#endif
|
||||||
VAR_SMTPD_PEERNAME_LOOKUP, DEF_SMTPD_PEERNAME_LOOKUP, &var_smtpd_peername_lookup,
|
VAR_SMTPD_PEERNAME_LOOKUP, DEF_SMTPD_PEERNAME_LOOKUP, &var_smtpd_peername_lookup,
|
||||||
VAR_SMTPD_DELAY_OPEN, DEF_SMTPD_DELAY_OPEN, &var_smtpd_delay_open,
|
VAR_SMTPD_DELAY_OPEN, DEF_SMTPD_DELAY_OPEN, &var_smtpd_delay_open,
|
||||||
|
@ -145,6 +145,7 @@ typedef struct SMTPD_STATE {
|
|||||||
char *dsn_envid; /* temporary MAIL FROM state */
|
char *dsn_envid; /* temporary MAIL FROM state */
|
||||||
int dsn_ret; /* temporary MAIL FROM state */
|
int dsn_ret; /* temporary MAIL FROM state */
|
||||||
VSTRING *dsn_buf; /* scratch space for xtext expansion */
|
VSTRING *dsn_buf; /* scratch space for xtext expansion */
|
||||||
|
VSTRING *dsn_orcpt_buf; /* scratch space for ORCPT parsing */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Pass-through proxy client.
|
* Pass-through proxy client.
|
||||||
|
@ -78,6 +78,15 @@ const char *smtpd_milter_eval(const char *name, void *ptr)
|
|||||||
/*
|
/*
|
||||||
* Connect macros.
|
* Connect macros.
|
||||||
*/
|
*/
|
||||||
|
if (strcmp(name, S8_MAC__) == 0) {
|
||||||
|
if (state->expand_buf == 0)
|
||||||
|
state->expand_buf = vstring_alloc(10);
|
||||||
|
vstring_sprintf(state->expand_buf, "%s [%s]",
|
||||||
|
state->reverse_name, state->addr);
|
||||||
|
if (strcasecmp(state->name, state->reverse_name) != 0)
|
||||||
|
vstring_strcat(state->expand_buf, " (may be forged)");
|
||||||
|
return (STR(state->expand_buf));
|
||||||
|
}
|
||||||
if (strcmp(name, S8_MAC_J) == 0)
|
if (strcmp(name, S8_MAC_J) == 0)
|
||||||
return (var_myhostname);
|
return (var_myhostname);
|
||||||
if (strcmp(name, S8_MAC_CLIENT_ADDR) == 0)
|
if (strcmp(name, S8_MAC_CLIENT_ADDR) == 0)
|
||||||
|
@ -137,6 +137,7 @@ void smtpd_state_init(SMTPD_STATE *state, VSTREAM *stream,
|
|||||||
#endif
|
#endif
|
||||||
state->dsn_envid = 0;
|
state->dsn_envid = 0;
|
||||||
state->dsn_buf = vstring_alloc(100);
|
state->dsn_buf = vstring_alloc(100);
|
||||||
|
state->dsn_orcpt_buf = vstring_alloc(100);
|
||||||
#ifdef USE_TLS
|
#ifdef USE_TLS
|
||||||
state->tls_use_tls = 0;
|
state->tls_use_tls = 0;
|
||||||
state->tls_enforce_tls = 0;
|
state->tls_enforce_tls = 0;
|
||||||
@ -212,6 +213,8 @@ void smtpd_state_reset(SMTPD_STATE *state)
|
|||||||
vstring_free(state->instance);
|
vstring_free(state->instance);
|
||||||
if (state->dsn_buf)
|
if (state->dsn_buf)
|
||||||
vstring_free(state->dsn_buf);
|
vstring_free(state->dsn_buf);
|
||||||
|
if (state->dsn_orcpt_buf)
|
||||||
|
vstring_free(state->dsn_orcpt_buf);
|
||||||
|
|
||||||
#ifdef USE_SASL_AUTH
|
#ifdef USE_SASL_AUTH
|
||||||
if (var_smtpd_sasl_enable)
|
if (var_smtpd_sasl_enable)
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
#include <name_code.h>
|
#include <name_code.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* TLS enforcement levels. Non-sentinel values also be used to indicate
|
* TLS enforcement levels. Non-sentinel values may also be used to indicate
|
||||||
* the actual security level of a session.
|
* the actual security level of a session.
|
||||||
*/
|
*/
|
||||||
#define TLS_LEV_NOTFOUND -1 /* sentinel */
|
#define TLS_LEV_NOTFOUND -1 /* sentinel */
|
||||||
@ -174,6 +174,7 @@ typedef struct {
|
|||||||
int verifydepth;
|
int verifydepth;
|
||||||
const char *cache_type;
|
const char *cache_type;
|
||||||
long scache_timeout;
|
long scache_timeout;
|
||||||
|
int set_sessid;
|
||||||
const char *cert_file;
|
const char *cert_file;
|
||||||
const char *key_file;
|
const char *key_file;
|
||||||
const char *dcert_file;
|
const char *dcert_file;
|
||||||
|
@ -447,7 +447,7 @@ SSL_CTX *tls_server_init(const tls_server_props *props)
|
|||||||
tls_print_errors();
|
tls_print_errors();
|
||||||
cachable = 0;
|
cachable = 0;
|
||||||
}
|
}
|
||||||
if (cachable) {
|
if (cachable || props->set_sessid) {
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Initialize the session cache.
|
* Initialize the session cache.
|
||||||
@ -474,8 +474,10 @@ SSL_CTX *tls_server_init(const tls_server_props *props)
|
|||||||
SSL_CTX_set_session_cache_mode(server_ctx,
|
SSL_CTX_set_session_cache_mode(server_ctx,
|
||||||
SSL_SESS_CACHE_SERVER |
|
SSL_SESS_CACHE_SERVER |
|
||||||
SSL_SESS_CACHE_NO_AUTO_CLEAR);
|
SSL_SESS_CACHE_NO_AUTO_CLEAR);
|
||||||
SSL_CTX_sess_set_get_cb(server_ctx, get_server_session_cb);
|
if (cachable) {
|
||||||
SSL_CTX_sess_set_new_cb(server_ctx, new_server_session_cb);
|
SSL_CTX_sess_set_get_cb(server_ctx, get_server_session_cb);
|
||||||
|
SSL_CTX_sess_set_new_cb(server_ctx, new_server_session_cb);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* OpenSSL ignores timed-out sessions. We need to set the internal
|
* OpenSSL ignores timed-out sessions. We need to set the internal
|
||||||
|
Loading…
x
Reference in New Issue
Block a user