]> git.ipfire.org Git - thirdparty/postfix.git/commitdiff
postfix-2.3.1 v2.3.1
authorWietse Venema <wietse@porcupine.org>
Mon, 24 Jul 2006 05:00:00 +0000 (00:00 -0500)
committerViktor Dukhovni <postfix-users@dukhovni.org>
Sat, 10 Feb 2018 20:47:46 +0000 (15:47 -0500)
59 files changed:
postfix/HISTORY
postfix/Makefile.in
postfix/README_FILES/DB_README
postfix/README_FILES/FILTER_README
postfix/README_FILES/LINUX_README
postfix/README_FILES/MILTER_README
postfix/README_FILES/RELEASE_NOTES [changed from file to symlink]
postfix/README_FILES/SASL_README
postfix/README_FILES/TLS_README
postfix/conf/postfix-files
postfix/html/DB_README.html
postfix/html/FILTER_README.html
postfix/html/LINUX_README.html
postfix/html/MILTER_README.html
postfix/html/SASL_README.html
postfix/html/TLS_README.html
postfix/html/postconf.5.html
postfix/html/postfix-manuals.html
postfix/html/postfix.1.html
postfix/html/postsuper.1.html
postfix/html/smtp.8.html
postfix/html/smtpd.8.html
postfix/man/man1/postfix.1
postfix/man/man1/postsuper.1
postfix/man/man5/postconf.5
postfix/man/man8/smtp.8
postfix/man/man8/smtpd.8
postfix/mantools/postlink
postfix/proto/DB_README.html
postfix/proto/FILTER_README.html
postfix/proto/LINUX_README.html
postfix/proto/MILTER_README.html
postfix/proto/SASL_README.html
postfix/proto/TLS_README.html
postfix/proto/postconf.proto
postfix/src/cleanup/cleanup.h
postfix/src/cleanup/cleanup_milter.c
postfix/src/cleanup/cleanup_milter.in1
postfix/src/cleanup/cleanup_milter.ref1
postfix/src/cleanup/cleanup_state.c
postfix/src/global/mail_params.h
postfix/src/global/mail_version.h
postfix/src/milter/milter8.c
postfix/src/milter/test-list
postfix/src/milter/test-milter.c
postfix/src/pickup/pickup.c
postfix/src/postfix/postfix.c
postfix/src/postsuper/postsuper.c
postfix/src/smtp/lmtp_params.c
postfix/src/smtp/smtp.c
postfix/src/smtp/smtp_params.c
postfix/src/smtp/smtp_proto.c
postfix/src/smtp/smtp_sasl_glue.c
postfix/src/smtpd/smtpd.c
postfix/src/smtpd/smtpd.h
postfix/src/smtpd/smtpd_milter.c
postfix/src/smtpd/smtpd_state.c
postfix/src/tls/tls.h
postfix/src/tls/tls_server.c

index c4ee6c2ddedf76fc8c4cee2cc93e87a0849b0d65..16deafd4d1285845f33371981a7ac99be3c3959e 100644 (file)
@@ -12188,17 +12188,18 @@ Apologies for any names omitted.
 20060510
 
        Preliminary TLS_README and postconf(5) changes completed.
+       Victor Duchovni.
 
        Added smtp_tls_policy_maps and smtp_tls_protocols features
        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
 
        Destinations that share a common server may have distinct
        TLS protocol and cipherlist requirements, with mandatory
        TLS add the protocol and cipherlist values to the TLS session
-       lookup key.
+       lookup key. Victor Duchovni.
 
 20060516
 
@@ -12228,14 +12229,14 @@ Apologies for any names omitted.
 
        The smtp_tls_policy_maps table now implements parent domain
        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
        Duchovni.
 
 20060519
 
        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.
 
 20060523
@@ -12482,7 +12483,7 @@ Apologies for any names omitted.
        after an opportunistic TLS handshake fails. Specify
        "smtp_sasl_auth_enforce = no" to deliver mail anyway.  File:
        smtp/smtp_proto.c. See workaround 20060711 for sender-dependent
-       SASL passwords.
+       SASL passwords. This was undone with the 20060719 workaround.
 
 20060709
 
@@ -12523,9 +12524,10 @@ Apologies for any names omitted.
        after the header label and ":" in an interesting manner.
        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
        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_milter.c.
@@ -12533,3 +12535,79 @@ Apologies for any names omitted.
        Bugfix: file/memory leak if a transfer of multiple milters
        from smtpd to cleanup broke in the middle.  Found by Coverity.
        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.
index e3d75e6ef6bdc9783a7c65e96cac69d50ec5060e..5dadb462ced9e80279d00ddf46e6a44f33d75dd8 100644 (file)
@@ -61,6 +61,8 @@ depend_update:
 tidy:  clean
        rm -f Makefile */Makefile src/*/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]* \
            junk */junk */*/junk \
            *core */*core */*/*core \
index 3d2236971a7d6d34090ec1fe4ea9d0b70d30d250..62b852ef388e69132abe6d2bd227ded14741997b 100644 (file)
@@ -74,7 +74,7 @@ B\bBu\bui\bil\bld\bdi\bin\bng\bg P\bPo\bos\bst\btf\bfi\bix\bx o\bon\bn B\bBS\bSD\bD s\bsy\bys\bst\bte\bem
 Some BSD systems ship with multiple Berkeley DB implementations. Normally,
 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:
 
     % make tidy
index cace42a9e883cc1ea250e2ecf8bc99768511ab6a..330e586303b7a4f6794fdd0641e512587a41d74d 100644 (file)
@@ -344,12 +344,10 @@ the Postfix master.cf file:
     real client name IP address. See smtp(8) and XFORWARD_README for more
     information.
 
-  * With "-o disable_mime_output_conversion=yes", the scan delivery agent will
-    not convert 8BITMIME mail to quoted-printable form while delivering to the
-    content filter, as that would invalidate domainkeys and other digital
-    signatures. This workaround is needed because some SMTP-based content
-    filters don't announce 8BITMIME support, even though they can handle it
-    just fine.
+  * The "-o disable_mime_output_conversion=yes" is a workaround that prevents
+    the breaking of domainkeys and other digital signatures. This is needed
+    because some SMTP-based content filters don't announce 8BITMIME support,
+    even though they can handle it just fine.
 
 A\bAd\bdv\bva\ban\bnc\bce\bed\bd c\bco\bon\bnt\bte\ben\bnt\bt f\bfi\bil\blt\bte\ber\br:\b: r\bru\bun\bnn\bni\bin\bng\bg t\bth\bhe\be c\bco\bon\bnt\bte\ben\bnt\bt f\bfi\bil\blt\bte\ber\br
 
index 4781906c03aa6c9cf007a12f93dfdd826d71c1d0..3325cd1d189b1c315eb4741b08f9199425e4bc0f 100644 (file)
@@ -5,10 +5,15 @@ P\bPo\bos\bst\btf\bfi\bix\bx a\ban\bnd\bd L\bLi\bin\bnu\bux\bx
 B\bBe\ber\brk\bke\bel\ble\bey\by D\bDB\bB i\bis\bss\bsu\bue\bes\bs
 
 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???-
-devel-???) that comes with your Linux system. Only that package contains the
-files that correspond to the Berkeley DB version that is used by the system
-library routines.
+you MUST install the Berkeley DB development package (name: db???-devel-???)
+that matches your system library. You can find out what is installed with the
+rpm command. For example:
+
+    $ r\brp\bpm\bm -\b-q\bqf\bf /\b/u\bus\bsr\br/\b/l\bli\bib\bb/\b/l\bli\bib\bbd\bdb\bb.\b.s\bso\bo
+    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
 program will dump core when it is built with a different Berkeley DB version
index 66356a0955d031cdc9260fd62649e0a3279d650e..ca95394f61d28bc20d43cf87ece03a8eb0ed5f7c 100644 (file)
@@ -104,7 +104,7 @@ On other platforms you have two options:
     Sendmail source code instead:
 
         $ g\bgz\bzc\bca\bat\bt s\bse\ben\bnd\bdm\bma\bai\bil\bl-\b-x\bx.\b.y\by.\b.z\bz.\b.t\bta\bar\br.\b.g\bgz\bz |\b| t\bta\bar\br x\bxf\bf -\b-
-        $ c\bcd\bd s\bse\ben\bnd\bdm\bma\bai\bil\bl-\b-x\bx.\b.y\by.\b.z\bz
+        $ c\bcd\bd s\bse\ben\bnd\bdm\bma\bai\bil\bl-\b-x\bx.\b.y\by.\b.z\bz/\b/l\bli\bib\bbm\bmi\bil\blt\bte\ber\br
         $ m\bma\bak\bke\be
         [...lots of output omitted...]
 
@@ -316,6 +316,9 @@ workarounds section below for solutions.
     |_\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b|_\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b|_\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b |
     |j                   |Always                   |value of myhostname       |
     |_\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b|_\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b|_\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b |
+    |_                   |Always                   |The validated client name |
+    |                    |                         |and address               |
+    |_\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b|_\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b|_\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b |
     |{auth_authen}       |MAIL, DATA, EOM          |SASL login name           |
     |_\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b|_\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b|_\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b _\b |
     |{auth_author}       |MAIL, DATA, EOM          |SASL sender               |
@@ -382,9 +385,9 @@ message).
 W\bWo\bor\brk\bka\bar\bro\bou\bun\bnd\bds\bs
 
 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
-with "disable_mime_output_conversion = yes", as described in the advanced
-content filter example.
+content filter, then you should add a line to master.cf with "-
+o disable_mime_output_conversion=yes" (note: no spaces around the "="), as
+described in the advanced content filter example.
 
 Sendmail Milter applications were originally developed for the Sendmail version
 8 MTA, which has a different architecture than Postfix. The result is that some
deleted file mode 100644 (file)
index ef08d6de54bbc73ca482b547671456cc7cf2abb6..0000000000000000000000000000000000000000
+++ /dev/null
@@ -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.
new file mode 120000 (symlink)
index 0000000000000000000000000000000000000000..577eefe81a6d6573e513f1965722f9483b1ad6f3
--- /dev/null
@@ -0,0 +1 @@
+../RELEASE_NOTES
\ No newline at end of file
index 163ca0416fa269a915bafe6581528f94aead3e5e..87ae46b270523070597500c77340b48900300fed 100644 (file)
@@ -71,13 +71,14 @@ no need to link extra libraries into Postfix.
 To generate the necessary Makefiles, execute the following in the Postfix top-
 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.
 
 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
     the SASL plug-in type in the Postfix main.cf file.
 
index a5353848a639d50c70cc7fcc32e7b8891f10abb5..2a0b0e299827b613ca842775139e7d766418293c 100644 (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
 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
-(smtps) was once chosen for this feature.
+o smtpd_tls_wrappermode=yes" (note: no space around the "=") as an smtpd(8)
+command line option. Port 465 (smtps) was once chosen for this feature.
 
 Example:
 
@@ -426,6 +426,17 @@ Example:
     /etc/postfix/main.cf:
         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
+
 S\bSe\ber\brv\bve\ber\br a\bac\bcc\bce\bes\bss\bs c\bco\bon\bnt\btr\bro\bol\bl
 
 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
 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
-    sensitive domains with explicit smtp:[mailhost] or smtp:[mailhost]:port
-    destinations (you can assure security of this table unlike DNS); in the
-    smtp_tls_per_site table, specify the value "MUST" for the key [mailhost] or
-    smtp:[mailhost]:port. This prevents false hostname information in DNS MX
-    records from changing Postfix's notion of the server hostname that is used
-    for TLS policy lookup and server certificate verification.
+    sensitive domains with explicit securetls:[mailhost] or securetls:
+    [mailhost]:port destinations (you can assure security of this table unlike
+    DNS). This prevents false hostname information in DNS MX records from
+    changing Postfix's notion of the server hostname that is used for TLS
+    policy lookup and server certificate verification. The "securetls"
+    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
     "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:
         securetls unix  -       -       n       -       100     smtp
-            -o smtp_connection_cache_on_demand=no
-            -o smtp_connection_cache_destinations=
             -o smtp_enforce_tls=yes
             -o smtp_tls_enforce_peername=yes
 
index 714163f7a3bc95d0b0aef32cae1eb0c7390bb1d5..b04779dc005547bfc8957dac2a52b7a8f7988d14 100644 (file)
@@ -353,6 +353,7 @@ $html_directory/postconf.1.html:f:root:-:644
 $html_directory/postconf.5.html:f:root:-:644
 $html_directory/postdrop.1.html: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/postkick.1.html:f:root:-:644
 $html_directory/postlock.1.html:f:root:-:644
index 3c803d07777ee7bae6b121b760fe2bf1a93fdbc3..d89fd5028137db49a0b244d742b566d1621ebf7a 100644 (file)
@@ -112,7 +112,7 @@ Berkeley DB versions</a></h2>
 Normally, Postfix builds with the default DB version that ships
 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>
 
 <blockquote>
index 01d08b6d78929c35ef4de79e78026f166f72b503..bd78079a809fe26cbd0f923dcf7df649bf518184 100644 (file)
@@ -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>
 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
-delivery agent will not convert 8BITMIME mail to quoted-printable
-form while delivering to the content filter, as that would invalidate
-domainkeys and other digital signatures.  This workaround is needed
-because some SMTP-based content filters don't announce 8BITMIME
-support, even though they can handle it just fine.  </p>
+<li> <p> The "-o <a href="postconf.5.html#disable_mime_output_conversion">disable_mime_output_conversion</a>=yes" is a workaround
+that prevents the breaking of domainkeys and other digital signatures.
+This is needed because some SMTP-based content filters don't announce
+8BITMIME support, even though they can handle it just fine.  </p>
 
 </ul>
 
index 202e30baf887023ad9fbba7155ca12f8504af886..65519b6b073100f396f9a08c45e41a2ceb0f11e7 100644 (file)
 
 <p> 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???-devel-???) that comes with your Linux
-system. Only that package contains the files that correspond to the
-Berkeley DB version that is used by the system library routines.
+package (name: db???-devel-???) that matches your system library.
+You can find out what is installed with the rpm command. For example:
 </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.
 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
index 1ae1d0676f52ddc4914d7ea13b2c05d75f62694c..2619bab66bced4d3a702ebc679e6d0417c918eea 100644 (file)
@@ -228,7 +228,7 @@ library from Sendmail source code instead: </p>
 <blockquote>
 <pre>
 $ <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>
 [...<i>lots of output omitted</i>...]
 </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>
 
+<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
 login name </td> </tr>
 
@@ -613,9 +616,9 @@ TO </td> </tr>
 <h2><a name="workarounds">Workarounds</a></h2>
 
 <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
-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>
-= yes", as described in the <a
+use an SMTP-based content filter, then you should add a line to
+<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
+spaces around the "="), as described in the <a
 href="FILTER_README.html#advanced_filter">advanced content filter</a>
 example. </p>
 
index d177f7f15adffd70c61bbd480922baf3b46d34ae..3086d14e4cc804d748f848dbdabf6ad24d41c4a1 100644 (file)
@@ -127,7 +127,7 @@ in the Postfix top-level directory: </p>
 
 <blockquote>
 <pre>
-% make makefiles CCARGS='-DUSE_SASL_AUTH -DDEF_SASL_SERVER=\"dovecot\"'
+% make makefiles CCARGS='-DUSE_SASL_AUTH -DDEF_SASL_SERVER_TYPE=\"dovecot\"'
 </pre>
 </blockquote>
 
@@ -138,7 +138,7 @@ in the Postfix top-level directory: </p>
 
 <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
 don't have to specify the SASL plug-in type in the Postfix <a href="postconf.5.html">main.cf</a>
 file.  </p>
index 42ed35f78d2b6ab47eef274f059d3d4acd377561..43d6541ebc83b28a40260676596f12542f81f821 100644 (file)
@@ -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
 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
-line option.  Port 465 (smtps) was once chosen for this feature.
+and specify "-o <a href="postconf.5.html#smtpd_tls_wrappermode">smtpd_tls_wrappermode</a>=yes" (note: no space around
+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> Example: </p>
@@ -631,6 +632,22 @@ recommends a maximum of 24 hours.  </p>
 </pre>
 </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>
 
 <p> Postfix TLS support introduces three additional features for
@@ -1822,10 +1839,10 @@ the following information:  </p>
 <dl>
 
 <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
-may be obtained from other DNS lookups, such as MX lookups or CNAME
-lookups. Use of the hostname lookup key is discouraged; always use the
-next-hop destination instead. </dd>
+name of the server that the Postfix SMTP client connects to; this
+name may be obtained from other DNS lookups, such as MX lookups or
+CNAME lookups. Use of the hostname lookup key is discouraged; always
+use the next-hop destination instead. </dd>
 
 <dt> next-hop destination </dt> <dd> This is normally the domain portion
 of the recipient address, but it may be overridden by information from
@@ -1924,17 +1941,19 @@ steps: </p>
 
 <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
-entries for sensitive domains with explicit <a href="smtp.8.html">smtp</a>:[<i>mailhost</i>]
-or <a href="smtp.8.html">smtp</a>:[<i>mailhost</i>]:<i>port</i> destinations (you can assure
-security of this table unlike DNS); in the <a href="postconf.5.html#smtp_tls_per_site">smtp_tls_per_site</a>
-table, specify the value "MUST" for the key [<i>mailhost</i>] or
-<a href="smtp.8.html">smtp</a>:[<i>mailhost</i>]:<i>port</i>. This prevents false hostname
-information in DNS MX records from changing Postfix's notion of the
-server hostname that is used for TLS policy lookup and server certificate
-verification. </p>
+entries for sensitive domains with explicit securetls:[<i>mailhost</i>]
+or securetls:[<i>mailhost</i>]:<i>port</i> destinations (you can
+assure security of this table unlike DNS). This prevents false
+hostname information in DNS MX records from changing Postfix's
+notion of the server hostname that is used for TLS policy lookup
+and server certificate verification. The "securetls" transport is
+configured to enforce TLS with peername verification, and to disable
+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
 "<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>:
     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_tls_enforce_peername">smtp_tls_enforce_peername</a>=yes
 </pre>
index 0600eabab6dcbaf474bf5561c62276fc3325b605..b485dc1d8b7cc706e45442e6dc88d9f992e07628 100644 (file)
@@ -3556,17 +3556,6 @@ Enable SASL authentication in the Postfix LMTP client.
 </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>
 
 <DT><b><a name="lmtp_sasl_mechanism_filter">lmtp_sasl_mechanism_filter</a>
@@ -7590,19 +7579,6 @@ Example:
 </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>
 
 <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>
 (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
 "unknown" when it cannot be looked up or verified, or when name
 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>
 
 
+</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 &lt; 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>
 
 <DT><b><a name="smtpd_tls_ask_ccert">smtpd_tls_ask_ccert</a>
index ac25aab95fa9648f120621ad9130c7a8f6150ba4..9a6ea668ed109be4d5d1067263552edd5dfcd388 100644 (file)
@@ -113,9 +113,9 @@ the following convention:  </p>
 
 <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>
 
index fb225222e134b076e706eae3a6b72ec1a1fd3151..f8bc251b416bfdf9e36029fa17ad469bb1d00ea3 100644 (file)
@@ -62,7 +62,7 @@ POSTFIX(1)                                                          POSTFIX(1)
               <b>postfix-files</b> file.
 
               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>
               setting for an already installed Postfix system.
 
@@ -71,13 +71,13 @@ POSTFIX(1)                                                          POSTFIX(1)
               <b>fix/post-install set-permissions</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
               update  services,  and  add or update configuration
               parameter settings.
 
               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.
               With  Postfix  2.0  and  earlier,  use  "<b>/etc/post-</b>
@@ -86,7 +86,7 @@ POSTFIX(1)                                                          POSTFIX(1)
        The following options are implemented:
 
        <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-
               figuration  directory.   Use  this  to  distinguish
               between multiple  Postfix  instances  on  the  same
@@ -118,7 +118,7 @@ POSTFIX(1)                                                          POSTFIX(1)
               present.
 
 <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:
 
        <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.
 
        <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
-              master.cf configuration files.
+              The default location of  the  Postfix  <a href="postconf.5.html">main.cf</a>  and
+              <a href="master.5.html">master.cf</a> configuration files.
 
        <b><a href="postconf.5.html#queue_directory">queue_directory</a> (see 'postconf -d' output)</b>
               The  location of the Postfix top-level queue direc-
@@ -173,8 +173,8 @@ POSTFIX(1)                                                          POSTFIX(1)
        Other configuration parameters:
 
        <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
-              master.cf configuration files.
+              The  default  location  of  the Postfix <a href="postconf.5.html">main.cf</a> and
+              <a href="master.5.html">master.cf</a> configuration files.
 
        <b><a href="postconf.5.html#import_environment">import_environment</a> (see 'postconf -d' output)</b>
               The list of environment parameters that  a  Postfix
@@ -190,8 +190,8 @@ POSTFIX(1)                                                          POSTFIX(1)
               becomes, for example, "postfix/smtpd".
 
 <b>FILES</b>
-       /etc/postfix/main.cf, Postfix configuration parameters
-       /etc/postfix/master.cf, Postfix daemon processes
+       /etc/postfix/<a href="postconf.5.html">main.cf</a>, Postfix configuration parameters
+       /etc/postfix/<a href="master.5.html">master.cf</a>, Postfix daemon processes
        /etc/postfix/postfix-files, file/directory permissions
        /etc/postfix/postfix-script, administrative commands
        /etc/postfix/post-install, post-installation configuration
@@ -214,8 +214,8 @@ POSTFIX(1)                                                          POSTFIX(1)
 
        Postfix configuration:
        <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="postconf.5.html">postconf(5)</a>, Postfix main.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 <a href="postconf.5.html">main.cf</a> file syntax
 
        Table-driven mechanisms:
        <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
        Yorktown Heights, NY 10598, USA
 
+       TLS support by:
+       Lutz Jaenicke
+       Brandenburg University of Technology
+       Cottbus, Germany
+
+       Victor Duchovni
+       Morgan Stanley
+
        SASL support originally by:
        Till Franke
        SuSE Rhein/Main AG
index 28e5cc5d95b836962f616b9342b2b6c810ad54fb..16184d2245d5fa087b76fd834a95c599bc5e6a6f 100644 (file)
@@ -30,7 +30,7 @@ POSTSUPER(1)                                                      POSTSUPER(1)
        Options:
 
        <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.  See  also  the  MAIL_CONFIG environment
               setting below.
@@ -136,12 +136,32 @@ POSTSUPER(1)                                                      POSTSUPER(1)
               case.
 
               A requeued message is moved to the <b>maildrop</b>  queue,
-              from  where  it is copied by the pickup daemon to a
-              new file whose name is guaranteed to match the  new
-              queue file inode number. The new queue file is sub-
-              jected again to mail address rewriting and  substi-
-              tution. This is useful when rewriting rules or vir-
-              tual mappings have changed.
+              from  where  it  is  copied  by  the  <a href="pickup.8.html"><b>pickup</b>(8)</a> and
+              <a href="cleanup.8.html"><b>cleanup</b>(8)</a> daemons to a new  queue  file.  In  many
+              respects  its  handling  differs from that of a new
+              local submission.
+
+              <b>o</b>      The  message  is  not   subjected   to   the
+                     <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
               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>
        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>
        Mail that is not sanitized by Postfix (i.e.  mail  in  the
        <b>maildrop</b> queue) cannot be placed "on hold".
 
 <b>CONFIGURATION PARAMETERS</b>
-       The  following  <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
        summary.  See <a href="postconf.5.html"><b>postconf</b>(5)</a> for more details including exam-
        ples.
 
        <b><a href="postconf.5.html#config_directory">config_directory</a> (see 'postconf -d' output)</b>
-              The default location of  the  Postfix  main.cf  and
-              master.cf configuration files.
+              The default location of  the  Postfix  <a href="postconf.5.html">main.cf</a>  and
+              <a href="master.5.html">master.cf</a> configuration files.
 
        <b><a href="postconf.5.html#hash_queue_depth">hash_queue_depth</a> (1)</b>
               The  number of subdirectory levels for queue direc-
index ca2302a55325f12e536618685df47c1ee7dfc820..9ea0a828c1672e4ff0dfbd8aa2728639917e5f19 100644 (file)
@@ -293,13 +293,6 @@ SMTP(8)                                                                SMTP(8)
 
        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>
               Enable sender-dependent authentication in the Post-
               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
               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>
               The verification depth for remote SMTP server  cer-
               tificates.
index 0a55a893ba1f58773ef73d3631dc5af481b82543..7092c7ba16153dfd97cfe3c48190d7f5108b1bf5 100644 (file)
@@ -130,6 +130,13 @@ SMTPD(8)                                                              SMTPD(8)
               Postpone the start  of  an  SMTP  mail  transaction
               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>
        See  the  <a href="ADDRESS_REWRITING_README.html">ADDRESS_REWRITING_README</a> document for a detailed
        discussion of Postfix address rewriting.
@@ -355,6 +362,11 @@ SMTPD(8)                                                              SMTPD(8)
               authority (CA) that issued the Postfix SMTP  server
               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>
               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:
 
        <b><a href="postconf.5.html#smtpd_peername_lookup">smtpd_peername_lookup</a> (yes)</b>
-              Attempt to look up the Postfix  SMTP  client  host-
-              name,  and  verify that the name matches the client
-              IP address.
+              Attempt to look up the remote SMTP client hostname,
+              and  verify  that  the  name  matches the client IP
+              address.
 
        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-
index e19443ea14732bb8d9e5ca8b737dceab35fcc272..75948b33703e10518b46dde7c965aaba4a5ce115 100644 (file)
@@ -259,6 +259,14 @@ IBM T.J. Watson Research
 P.O. Box 704
 Yorktown Heights, NY 10598, USA
 
+TLS support by:
+Lutz Jaenicke
+Brandenburg University of Technology
+Cottbus, Germany
+
+Victor Duchovni
+Morgan Stanley
+
 SASL support originally by:
 Till Franke
 SuSE Rhein/Main AG
index 23347ef1f5dc00af0631d2f21c060367f2dfde84..2b803854bc10206288819724258e73165f5ee906 100644 (file)
@@ -127,13 +127,31 @@ the program reads queue IDs from standard input.
 Specify \fB-r ALL\fR to requeue all messages. As a safety
 measure, the word \fBALL\fR must be specified in upper case.
 .sp
-A requeued message is moved to the \fBmaildrop\fR queue, from
-where it is copied by the pickup daemon to a new file whose name
-is guaranteed to match the new queue file inode number. The
-new queue file is subjected again to mail address rewriting and
-substitution. This is useful when rewriting rules or virtual
-mappings have changed.
+A requeued message is moved to the \fBmaildrop\fR queue,
+from where it is copied by the \fBpickup\fR(8) and
+\fBcleanup\fR(8) daemons to a new queue file. In many
+respects its handling differs from that of a new local
+submission.
+.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
+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.
 There is a very small possibility that \fBpostsuper\fR(1) requeues
 the wrong message file when it is executed while the Postfix mail
index 69f3c18245775a46db73494187493913ae72b66d..8484d021615c0985f29c2c0d93f6024ffc676085 100644 (file)
@@ -1901,11 +1901,6 @@ Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks).
 The default time unit is s (seconds).
 .SH lmtp_sasl_auth_enable (default: no)
 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)
 The LMTP-specific version of the smtp_sasl_mechanism_filter
 configuration parameter.  See there for details.
@@ -4218,13 +4213,6 @@ smtp_sasl_auth_enable = yes
 .fi
 .ad
 .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)
 If non-empty, a Postfix SMTP client filter for the remote SMTP
 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
 null sender address.
 .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
 "unknown" when it cannot be looked up or verified, or when name
 lookup is disabled.  Turning off name lookup reduces delays due to
@@ -6457,6 +6445,37 @@ smtpd_tls_CApath = /etc/postfix/certs
 .ft R
 .PP
 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)
 Ask a remote SMTP client for a client certificate. This
 information is needed for certificate based mail relaying with,
index 942f20c76cc3981f15cbb591952c4fa2359fd787..40d18484b1aeb8acccf1504368e304e53430d881 100644 (file)
@@ -262,11 +262,6 @@ If non-empty, a Postfix SMTP client filter for the remote SMTP
 server's list of offered SASL mechanisms.
 .PP
 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"
 Enable sender-dependent authentication in the Postfix SMTP client; this is
 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"
 Log the hostname of a remote SMTP server that offers STARTTLS,
 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"
 The verification depth for remote SMTP server certificates.
 .IP "\fBsmtp_tls_secure_cert_match (nexthop, dot-nexthop)\fR"
index 53ea252054fbfafa2ba3a682840f423b44f0ee04..b0865010bbbee6ec36c79f827a4695fab6d309f3 100644 (file)
@@ -124,6 +124,12 @@ to a remote SMTP client.
 .IP "\fBsmtpd_delay_open_until_valid_rcpt (yes)\fR"
 Postpone the start of an SMTP mail transaction until a valid
 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"
 .na
 .nf
@@ -310,6 +316,10 @@ The file with the certificate of the certification authority
 .IP "\fBsmtpd_tls_CAfile (empty)\fR"
 The file with the certificate of the certification authority
 (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"
 Ask a remote SMTP client for a client certificate.
 .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
 Available in Postfix version 2.3 and later:
 .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.
 .PP
 The per SMTP client connection count and request rate limits are
index 57e3c8a433b0d3083b7b8936352a0fab253f4782..babcb2f1dc276c2387b21554eb10f60369d63934 100755 (executable)
@@ -253,7 +253,6 @@ while (<>) {
     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_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_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;
@@ -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_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_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_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;
@@ -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_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_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_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;
index 505cbba8cda6ec491929d0ab07faa158ff4e4433..896817b258c2bc61160d62ce610f3119f0d52304 100644 (file)
@@ -112,7 +112,7 @@ Berkeley DB versions</a></h2>
 Normally, Postfix builds with the default DB version that ships
 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>
 
 <blockquote>
index fb7679144bbf65005f3126a1a633bcded938b25f..7e586878dc4e3387af4aa21bf5dfdea776c8b8ba 100644 (file)
@@ -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
 for more information. </p>
 
-<li> <p> With "-o disable_mime_output_conversion=yes", the scan
-delivery agent will not convert 8BITMIME mail to quoted-printable
-form while delivering to the content filter, as that would invalidate
-domainkeys and other digital signatures.  This workaround is needed
-because some SMTP-based content filters don't announce 8BITMIME
-support, even though they can handle it just fine.  </p>
+<li> <p> The "-o disable_mime_output_conversion=yes" is a workaround
+that prevents the breaking of domainkeys and other digital signatures.
+This is needed because some SMTP-based content filters don't announce
+8BITMIME support, even though they can handle it just fine.  </p>
 
 </ul>
 
index ffefbf2ea5b062a34a005a3c07bc5b9bb0ee82c9..b2a7b50571e32113bf0a2dcba4c421cc3cd2cbf0 100644 (file)
 
 <p> 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???-devel-???) that comes with your Linux
-system. Only that package contains the files that correspond to the
-Berkeley DB version that is used by the system library routines.
+package (name: db???-devel-???) that matches your system library.
+You can find out what is installed with the rpm command. For example:
 </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.
 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
index 8e56061f2d5d207f1b5f5d0178e750f007d653b5..3fcf83da22bea9ff32693531c89462c92a587386 100644 (file)
@@ -228,7 +228,7 @@ library from Sendmail source code instead: </p>
 <blockquote>
 <pre>
 $ <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>
 [...<i>lots of output omitted</i>...]
 </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>
 
+<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
 login name </td> </tr>
 
@@ -613,9 +616,9 @@ TO </td> </tr>
 <h2><a name="workarounds">Workarounds</a></h2>
 
 <p> 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 with "disable_mime_output_conversion
-= yes", as described in the <a
+use an SMTP-based content filter, then you should add a line to
+master.cf with "-o disable_mime_output_conversion=yes" (note: no
+spaces around the "="), as described in the <a
 href="FILTER_README.html#advanced_filter">advanced content filter</a>
 example. </p>
 
index 2c0ac06c12e8258db9d5b71bd5453650bcf4f731..cd6d23ab1455964909f74c883258c39ad2570da3 100644 (file)
@@ -127,7 +127,7 @@ in the Postfix top-level directory: </p>
 
 <blockquote>
 <pre>
-% make makefiles CCARGS='-DUSE_SASL_AUTH -DDEF_SASL_SERVER=\"dovecot\"'
+% make makefiles CCARGS='-DUSE_SASL_AUTH -DDEF_SASL_SERVER_TYPE=\"dovecot\"'
 </pre>
 </blockquote>
 
@@ -138,7 +138,7 @@ INSTALL document. </p>
 
 <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
 don't have to specify the SASL plug-in type in the Postfix main.cf
 file.  </p>
index 249e3b22c428373bffcb43a8fb77e0fe700e4c61..df965a3b76fc705bbc15c157a81d2265171730cf 100644 (file)
@@ -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
 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
-line option.  Port 465 (smtps) was once chosen for this feature.
+and specify "-o smtpd_tls_wrappermode=yes" (note: no space around
+the "=") as an smtpd(8) command line option.  Port 465 (smtps) was
+once chosen for this feature.
 </p>
 
 <p> Example: </p>
@@ -631,6 +632,22 @@ recommends a maximum of 24 hours.  </p>
 </pre>
 </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>
 
 <p> Postfix TLS support introduces three additional features for
@@ -1822,10 +1839,10 @@ the following information:  </p>
 <dl>
 
 <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
-may be obtained from other DNS lookups, such as MX lookups or CNAME
-lookups. Use of the hostname lookup key is discouraged; always use the
-next-hop destination instead. </dd>
+name of the server that the Postfix SMTP client connects to; this
+name may be obtained from other DNS lookups, such as MX lookups or
+CNAME lookups. Use of the hostname lookup key is discouraged; always
+use the next-hop destination instead. </dd>
 
 <dt> next-hop destination </dt> <dd> This is normally the domain portion
 of the recipient address, but it may be overridden by information from
@@ -1924,17 +1941,19 @@ steps: </p>
 
 <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
-entries for sensitive domains with explicit smtp:[<i>mailhost</i>]
-or smtp:[<i>mailhost</i>]:<i>port</i> destinations (you can assure
-security of this table unlike DNS); in the smtp_tls_per_site
-table, specify the value "MUST" for the key [<i>mailhost</i>] or
-smtp:[<i>mailhost</i>]:<i>port</i>. This prevents false hostname
-information in DNS MX records from changing Postfix's notion of the
-server hostname that is used for TLS policy lookup and server certificate
-verification. </p>
+entries for sensitive domains with explicit securetls:[<i>mailhost</i>]
+or securetls:[<i>mailhost</i>]:<i>port</i> destinations (you can
+assure security of this table unlike DNS). This prevents false
+hostname information in DNS MX records from changing Postfix's
+notion of the server hostname that is used for TLS policy lookup
+and server certificate verification. The "securetls" 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. </p>
 
 <li> <p> Disallow CNAME hostname overrides. In main.cf, specify
 "smtp_cname_overrides_servername = no". This prevents false hostname
@@ -1971,8 +1990,6 @@ destinations. </p>
 
 /etc/postfix/master.cf:
     securetls unix  -       -       n       -       100     smtp
-        -o smtp_connection_cache_on_demand=no
-        -o smtp_connection_cache_destinations=
         -o smtp_enforce_tls=yes
         -o smtp_tls_enforce_peername=yes
 </pre>
index f233c4662a4cd902a46c895ee263130ad34b4aab..0918f8db92191d4c0b514c12dae9ed05aa28c07c 100644 (file)
@@ -8941,7 +8941,7 @@ process instance while mail is being forwarded.  </p>
 
 %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
 "unknown" when it cannot be looked up or verified, or when name
 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>
 
-%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
 
 <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>
 
 <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 &lt; 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>
index cc0a9bd51564cc7d818638b1774738c2bd2c665a..12b1d77dc92edddec137bfc2b521d0b51fd4f38d 100644 (file)
@@ -91,7 +91,10 @@ typedef struct CLEANUP_STATE {
 #endif
     MILTERS *milters;                  /* mail filters */
     const char *client_name;           /* real or ersatz client */
+    const char *reverse_name;          /* 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;
 
  /*
index ebd1f5ce70f2aef77427201b30bdab963bc904fb..15052e3b78dccf77ead7a75d61c3a9be62ec0fec 100644 (file)
@@ -779,6 +779,10 @@ static const char *cleanup_upd_header(void *context, ssize_t index,
      * The lookup result will never be a pointer record.
      * 
      * 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 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;
                    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);
                    CLEANUP_UPD_HEADER_RETURN(cleanup_milter_error(state,
                                                                   errno));
@@ -1215,12 +1220,21 @@ static const char *cleanup_milter_eval(const char *name, void *ptr)
     /*
      * 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)
        return (var_myhostname);
     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)
-       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.
@@ -1277,6 +1291,12 @@ static const char *cleanup_milter_apply(CLEANUP_STATE *state, const char *event,
     if (msg_verbose)
        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
      * 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);
 }
 
+/* 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 */
 
 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)
        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
      * filter library.
@@ -1382,9 +1440,6 @@ void    cleanup_milter_emul_mail(CLEANUP_STATE *state,
                                         const char *addr)
 {
     const char *resp;
-    const char *proto_attr;
-    const char *client_port;
-    int     client_af;
     const char *helo;
     const char *argv[2];
 
@@ -1397,33 +1452,14 @@ void    cleanup_milter_emul_mail(CLEANUP_STATE *state,
                         cleanup_ins_header, cleanup_del_header,
                         cleanup_add_rcpt, cleanup_del_rcpt,
                         cleanup_repl_body, (void *) 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;
+    if (state->client_name == 0)
+       cleanup_milter_client_init(state);
 
     /*
      * Emulate SMTP events.
      */
     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);
        return;
     }
@@ -1453,9 +1489,16 @@ void    cleanup_milter_emul_rcpt(CLEANUP_STATE *state,
                                         MILTERS *milters,
                                         const char *addr)
 {
+    const char *myname = "cleanup_milter_emul_rcpt";
     const char *resp;
     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
      * 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)
 {
+    const char *myname = "cleanup_milter_emul_data";
     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)
        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);
            } else {
                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) {
            if (argv->argc < 3) {
index d47d7eb1539eb0602081160855c60ad6de70ffbe..e1929af744d37cc0243b946014385c574f332fd3 100644 (file)
@@ -9,4 +9,6 @@ ins_header 2 X-Test-Header test header value 2
 del_header 2 X-Test-Header
 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
 close
index 0a54d2e6d3ac009467dc101a9d137d75e47edd26..5fea0c699267d3eca8725a98b381c4cdcb59e228 100644 (file)
      1353 pointer_record:            1193
      1193 deleted_text: X-Test-Header: test header value 1
      1229 pointer_record:            1370
-     1370 regular_text: X: X-replaced-header replacement header text
-     1416 pointer_record:             881
+     1370 pointer_record:            1433
+     1433 pointer_record:            1496
+     1496 regular_text: X: X-replaced-header replacement header text
+     1542 pointer_record:             881
       881 regular_text: Y: 1234567
       893 regular_text: Message-Id: <20060514010427.E0F703D1E36@tail.porcupine.org>
       954 regular_text: Date: Sat, 13 May 2006 21:04:18 -0400 (EDT)
index fae7fdd5800d2e520f5462b17c6c863c7e6b80b7..2cbd73ec234a103bc4d5f3b98ecfe0581e02bfa8 100644 (file)
@@ -109,7 +109,10 @@ CLEANUP_STATE *cleanup_state_alloc(VSTREAM *src)
     state->verp_delims = 0;
     state->milters = 0;
     state->client_name = 0;
+    state->reverse_name = 0;
     state->client_addr = 0;
+    state->client_af = 0;
+    state->client_port = 0;
     return (state);
 }
 
index 5ab4dbf559b8c37fa8bf5d9320cbdb1c33f76924..082a4a1267f1aebcc1ec9b87489afe2ce2304750 100644 (file)
@@ -1183,6 +1183,10 @@ extern char *var_smtpd_tls_scache_db;
 #define DEF_SMTPD_TLS_SCACHTIME        "3600s"
 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 DEF_SMTPD_DELAY_OPEN   1
 extern bool var_smtpd_delay_open;
index ca75a943e013478707559c948fa4333b8b53b271..5bfad277ff0726cfd6fe0ab2e6dc5959982b1da8 100644 (file)
@@ -20,8 +20,8 @@
   * Patches change both the patchlevel and the release date. Snapshots have no
   * patchlevel; they change the release date only.
   */
-#define MAIL_RELEASE_DATE      "20060711"
-#define MAIL_VERSION_NUMBER    "2.3.0"
+#define MAIL_RELEASE_DATE      "20060724"
+#define MAIL_VERSION_NUMBER    "2.3.1"
 
 #ifdef SNAPSHOT
 # define MAIL_VERSION_DATE     "-" MAIL_RELEASE_DATE
index 8566d882e61fe06bf2b9d971d25923e83fb6cdef..711f1015a9ebee536c4e83923505a58a96349b5c 100644 (file)
@@ -488,7 +488,7 @@ static void milter8_close_stream(MILTER8 *milter)
 /* milter8_read_resp - receive command code now, receive data later */
 
 static int milter8_read_resp(MILTER8 *milter, int event, unsigned char *command,
-                                   ssize_t *data_len)
+                                    ssize_t *data_len)
 {
     UINT32_TYPE 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)
 
     for (;;) {
+       char   *cp;
+       char   *rp;
+       char    ch;
+
        if (milter8_read_resp(milter, event, &cmd, &data_size) != 0)
            return (milter->def_reply);
        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.
             * Sendmail 8 changes receiver state). Note: the reply may be in
             * 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:
            if (milter8_read_data(milter, data_size,
@@ -1097,6 +1106,15 @@ static const char *milter8_event(MILTER8 *milter, int event,
                milter8_conf_error(milter);
                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)) {
 #ifdef LIBMILTER_AUTO_DISCONNECT
                milter8_close_stream(milter);
index f66a0ac3957895a747560eb880cec9a2991d2f84..62c4bb6b322ef848d922d3705a12cb0e64a35dcd 100644 (file)
@@ -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
 ./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
index f11962a44e1175b323d8f128e7e2cfbd3022ea8f..ad76eb8001161f2ae31be85f95f1966818316c08 100644 (file)
@@ -96,17 +96,23 @@ static char *reply_code;
 static char *reply_dsn;
 static char *reply_message;
 
+#ifdef SMFIR_INSHEADER
 static char *ins_hdr;
 static int ins_idx;
 static char *ins_val;
 
+#endif
+
+#ifdef SMFIR_CHGHEADER
 static char *chg_hdr;
 static int chg_idx;
 static char *chg_val;
 
+#endif
+
 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 (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)
 {
     printf("test_eom\n");
+#ifdef SMFIR_INSHEADER
     if (ins_hdr && smfi_insheader(ctx, ins_idx, ins_hdr, ins_val) == MI_FAILURE)
        fprintf(stderr, "smfi_insheader failed");
+#endif
+#ifdef SMFIR_CHGHEADER
     if (chg_hdr && smfi_chgheader(ctx, chg_hdr, chg_idx, chg_val) == MI_FAILURE)
        fprintf(stderr, "smfi_chgheader failed");
+#endif
     return (test_reply(ctx, test_eom_reply));
 }
 
@@ -319,11 +329,16 @@ int     main(int argc, char **argv)
            }
            break;
        case 'i':
+#ifdef SMFIR_INSHEADER
            if (ins_hdr) {
                fprintf(stderr, "too many -i options\n");
                exit(1);
            }
            parse_hdr_info(optarg, &ins_idx, &ins_hdr, &ins_val);
+#else
+           fprintf(stderr, "no libmilter support to insert header\n");
+           exit(1);
+#endif
            break;
        case 'p':
            if (smfi_setconn(optarg) == MI_FAILURE) {
@@ -332,11 +347,16 @@ int     main(int argc, char **argv)
            }
            break;
        case 'r':
+#ifdef SMFIR_CHGHEADER
            if (chg_hdr) {
                fprintf(stderr, "too many -r options\n");
                exit(1);
            }
            parse_hdr_info(optarg, &chg_idx, &chg_hdr, &chg_val);
+#else
+           fprintf(stderr, "no libmilter support to change header\n");
+           exit(1);
+#endif
            break;
        case 'v':
            verbose++;
index bb1704e4f3099bf364038dca95f0d4ccb0687c8a..04514a448a18b3a6888ea922bb4eb5e0ddcce22f 100644 (file)
@@ -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
      * 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
-     * (postsuper -r) or if the attribute specifies the MIME body type
-     * (sendmail -B).
+     * Records with named attributes are filtered by postdrop(1).
      * 
      * 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
         * (used in message content).
+        * 
+        * As documented in postsuper(1), ignore content filter record.
         */
        if (*expected != REC_TYPE_CONTENT[0]) {
            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)
        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.
      * 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,
                 (int) info->st.st_uid, info->sender,
                 ((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
      * 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
      * easier to implement the many possible error exits without forgetting
      * to close files, or to release memory.
@@ -449,6 +459,9 @@ static int pickup_file(PICKUP_INFO *info)
     cleanup_flags =
        input_transp_cleanup(CLEANUP_FLAG_BOUNCE | CLEANUP_FLAG_MASK_EXTERNAL,
                             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);
     if (attr_scan(cleanup, ATTR_FLAG_STRICT,
index bad094a78d062fe4c9a9fcb148e77f805414ac39..784526c47173290a1f47b4fe46fc1c4ba5df6831 100644 (file)
 /*     P.O. Box 704
 /*     Yorktown Heights, NY 10598, USA
 /*
+/*     TLS support by:
+/*     Lutz Jaenicke
+/*     Brandenburg University of Technology
+/*     Cottbus, Germany
+/*
+/*     Victor Duchovni
+/*     Morgan Stanley
+/*
 /*     SASL support originally by:
 /*     Till Franke
 /*     SuSE Rhein/Main AG
index 94c55aa11b55377b38d64174f126e92efa3ee704..e3636cdf766f2983a59300333b6fb3ef3ef368cf 100644 (file)
 /*     Specify \fB-r ALL\fR to requeue all messages. As a safety
 /*     measure, the word \fBALL\fR must be specified in upper case.
 /* .sp
-/*     A requeued message is moved to the \fBmaildrop\fR queue, from
-/*     where it is copied by the pickup daemon to a new file whose name
-/*     is guaranteed to match the new queue file inode number. The
-/*     new queue file is subjected again to mail address rewriting and
-/*     substitution. This is useful when rewriting rules or virtual
-/*     mappings have changed.
+/*     A requeued message is moved to the \fBmaildrop\fR queue,
+/*     from where it is copied by the \fBpickup\fR(8) and
+/*     \fBcleanup\fR(8) daemons to a new queue file. In many
+/*     respects its handling differs from that of a new local
+/*     submission.
+/* .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
+/*     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.
 /*     There is a very small possibility that \fBpostsuper\fR(1) requeues
 /*     the wrong message file when it is executed while the Postfix mail
index fa488781e9661058071f3b62c6de10321c211121..e5f0c119cfbcf81a847bf5fbc4240409740cb834 100644 (file)
@@ -95,6 +95,5 @@
 #endif
        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_SASL_ENFORCE, DEF_LMTP_SASL_ENFORCE, &var_smtp_sasl_enforce,
        0,
     };
index 7fdbf780d05b6d97446bafbfabfa2b8a8ad2034b..b6fdad8b04a3e405d5e4d3c75ee4249d775e56dc 100644 (file)
 /*     server's list of offered SASL mechanisms.
 /* .PP
 /*     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"
 /*     Enable sender-dependent authentication in the Postfix SMTP client; this is
 /*     available only with SASL authentication, and disables SMTP connection
 /* .IP "\fBsmtp_tls_note_starttls_offer (no)\fR"
 /*     Log the hostname of a remote SMTP server that offers STARTTLS,
 /*     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"
 /*     The verification depth for remote SMTP server certificates.
 /* .IP "\fBsmtp_tls_secure_cert_match (nexthop, dot-nexthop)\fR"
@@ -697,7 +699,6 @@ bool    var_smtp_sender_auth;
 char   *var_lmtp_tcp_port;
 int     var_scache_proto_tmout;
 bool    var_smtp_cname_overr;
-bool    var_smtp_sasl_enforce;
 
  /*
   * Global variables.
index 540da37812f5b36f7df2f0210f367a6cad313c3e..9c73b2d58bdfaf671e749d07b419ac17e4c57f1c 100644 (file)
@@ -99,6 +99,5 @@
 #endif
        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_SASL_ENFORCE, DEF_SMTP_SASL_ENFORCE, &var_smtp_sasl_enforce,
        0,
     };
index b66d91a9fd8eb0122eb4435e78bed4cd27ba3b46..7fb0c262fdb698dda2257918b22cab2fcafd537e 100644 (file)
@@ -359,7 +359,6 @@ int     smtp_helo(SMTP_STATE *state)
                                       "host %s refused to talk to me: %s",
                                       session->namaddr,
                                       translit(resp->str, "\n", " ")));
-           return (0);
        }
     } else {
        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
-     * inter-operability problems.
+     * No early returns allowed, to ensure consistent handling of TLS and
+     * SASL policies.
      */
-    if (smtp_ehlo_dis_maps == 0
-       || (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));
+    if (session->features & SMTP_FEATURE_ESMTP) {
 
-    /*
-     * Pick up some useful features offered by the SMTP server. XXX Until we
-     * have a portable routine to convert from string to off_t with proper
-     * overflow detection, ignore the message size limit advertised by the
-     * SMTP server. Otherwise, we might do the wrong thing when the server
-     * advertises a really huge message size limit.
-     * 
-     * XXX Allow for "code (SP|-) ehlo-keyword (SP|=) ehlo-param...", because
-     * MicroSoft implemented AUTH based on an old draft.
-     */
-    lines = resp->str;
-    for (n = 0; (words = mystrtok(&lines, "\n")) != 0; /* see below */ ) {
-       if (mystrtok(&words, "- ") && (word = mystrtok(&words, " \t=")) != 0) {
-           if (n == 0) {
-               if (session->helo != 0)
-                   myfree(session->helo);
+       /*
+        * Determine what server EHLO keywords to ignore, typically to avoid
+        * inter-operability problems.
+        */
+       if (smtp_ehlo_dis_maps == 0
+           || (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));
 
-               /*
-                * 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,
+       /*
+        * Pick up some useful features offered by the SMTP server. XXX Until
+        * we have a portable routine to convert from string to off_t with
+        * proper overflow detection, ignore the message size limit
+        * advertised by the SMTP server. Otherwise, we might do the wrong
+        * thing when the server advertises a really huge message size limit.
+        * 
+        * XXX Allow for "code (SP|-) ehlo-keyword (SP|=) ehlo-param...",
+        * because MicroSoft implemented AUTH based on an old draft.
+        */
+       lines = resp->str;
+       for (n = 0; (words = mystrtok(&lines, "\n")) != 0; /* see below */ ) {
+           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"),
                                         "mail for %s loops back to myself",
-                                              request->nexthop));
-                   else
-                       return (smtp_site_fail(state, DSN_BY_LOCAL_MTA,
+                                                  request->nexthop));
+                       else
+                           return (smtp_site_fail(state, DSN_BY_LOCAL_MTA,
                                             SMTP_RESP_FAKE(&fake, "4.4.6"),
                                         "mail for %s loops back to myself",
-                                              request->nexthop));
-               }
-           } else if (strcasecmp(word, "8BITMIME") == 0) {
-               if ((discard_mask & EHLO_MASK_8BITMIME) == 0)
-                   session->features |= SMTP_FEATURE_8BITMIME;
-           } else if (strcasecmp(word, "PIPELINING") == 0) {
-               if ((discard_mask & EHLO_MASK_PIPELINING) == 0)
-                   session->features |= SMTP_FEATURE_PIPELINING;
-           } else if (strcasecmp(word, "XFORWARD") == 0) {
-               if ((discard_mask & EHLO_MASK_XFORWARD) == 0)
-                   while ((word = mystrtok(&words, " \t")) != 0)
-                       session->features |= name_code(xforward_features,
-                                                NAME_CODE_FLAG_NONE, word);
-           } else if (strcasecmp(word, "SIZE") == 0) {
-               if ((discard_mask & EHLO_MASK_SIZE) == 0) {
-                   session->features |= SMTP_FEATURE_SIZE;
-                   if ((word = mystrtok(&words, " \t")) != 0) {
-                       if (!alldig(word))
-                           msg_warn("bad EHLO SIZE limit \"%s\" from %s",
-                                    word, session->namaddrport);
-                       else
-                           session->size_limit = off_cvt_string(word);
+                                                  request->nexthop));
+                   }
+               } else if (strcasecmp(word, "8BITMIME") == 0) {
+                   if ((discard_mask & EHLO_MASK_8BITMIME) == 0)
+                       session->features |= SMTP_FEATURE_8BITMIME;
+               } else if (strcasecmp(word, "PIPELINING") == 0) {
+                   if ((discard_mask & EHLO_MASK_PIPELINING) == 0)
+                       session->features |= SMTP_FEATURE_PIPELINING;
+               } else if (strcasecmp(word, "XFORWARD") == 0) {
+                   if ((discard_mask & EHLO_MASK_XFORWARD) == 0)
+                       while ((word = mystrtok(&words, " \t")) != 0)
+                           session->features |=
+                               name_code(xforward_features,
+                                         NAME_CODE_FLAG_NONE, word);
+               } else if (strcasecmp(word, "SIZE") == 0) {
+                   if ((discard_mask & EHLO_MASK_SIZE) == 0) {
+                       session->features |= SMTP_FEATURE_SIZE;
+                       if ((word = mystrtok(&words, " \t")) != 0) {
+                           if (!alldig(word))
+                               msg_warn("bad EHLO SIZE limit \"%s\" from %s",
+                                        word, session->namaddrport);
+                           else
+                               session->size_limit = off_cvt_string(word);
+                       }
                    }
-               }
 #ifdef USE_TLS
-           } else if (strcasecmp(word, "STARTTLS") == 0) {
-               /* Ignored later if we already sent STARTTLS. */
-               if ((discard_mask & EHLO_MASK_STARTTLS) == 0)
-                   session->features |= SMTP_FEATURE_STARTTLS;
+               } else if (strcasecmp(word, "STARTTLS") == 0) {
+                   /* Ignored later if we already sent STARTTLS. */
+                   if ((discard_mask & EHLO_MASK_STARTTLS) == 0)
+                       session->features |= SMTP_FEATURE_STARTTLS;
 #endif
 #ifdef USE_SASL_AUTH
-           } else if (var_smtp_sasl_enable && strcasecmp(word, "AUTH") == 0) {
-               if ((discard_mask & EHLO_MASK_AUTH) == 0)
-                   smtp_sasl_helo_auth(session, words);
+               } else if (var_smtp_sasl_enable
+                          && strcasecmp(word, "AUTH") == 0) {
+                   if ((discard_mask & EHLO_MASK_AUTH) == 0)
+                       smtp_sasl_helo_auth(session, words);
 #endif
-           } else if (strcasecmp(word, "DSN") == 0) {
-               if ((discard_mask & EHLO_MASK_DSN) == 0)
-                   session->features |= SMTP_FEATURE_DSN;
+               } else if (strcasecmp(word, "DSN") == 0) {
+                   if ((discard_mask & EHLO_MASK_DSN) == 0)
+                       session->features |= SMTP_FEATURE_DSN;
+               }
+               n++;
            }
-           n++;
        }
     }
     if (msg_verbose)
@@ -600,16 +612,6 @@ int     smtp_helo(SMTP_STATE *state)
 #ifdef USE_SASL_AUTH
     if (var_smtp_sasl_enable && (session->features & SMTP_FEATURE_AUTH))
        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
 
     return (0);
@@ -744,11 +746,22 @@ static int smtp_start_tls(SMTP_STATE *state)
        DONT_USE_DEAD_SESSION;
 
        /*
-        * If TLS is optional, try again, this time without TLS.
-        * Specifically, this session is not final, don't defer any
-        * recipients yet.
+        * If TLS is optional, try delivery to the same server over a
+        * plaintext connection. Otherwise we would defer mail forever with
+        * 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;
        return (smtp_site_fail(state, DSN_BY_LOCAL_MTA,
                               SMTP_RESP_FAKE(&fake, "4.7.5"),
index 433258dc75cd3969e844a38e1729148f3d63e1f5..139f6fd5309b34451077c8de8800c1322f9e205a 100644 (file)
@@ -175,9 +175,13 @@ int     smtp_sasl_passwd_lookup(SMTP_SESSION *session)
         && (value = mail_addr_find(smtp_sasl_passwd_map,
                                 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->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);
        passwd = split_at(session->sasl_username, ':');
+       if (session->sasl_passwd)
+           myfree(session->sasl_passwd);
        session->sasl_passwd = mystrdup(passwd ? passwd : "");
        if (msg_verbose)
            msg_info("%s: host `%s' user `%s' pass `%s'",
index 8425f1d3bc03cb077f902d0aa3010ff729e8da07..00098b56e06dec69fd12729a47ceea2376222a96 100644 (file)
 /* .IP "\fBsmtpd_delay_open_until_valid_rcpt (yes)\fR"
 /*     Postpone the start of an SMTP mail transaction until a valid
 /*     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
 /* .ad
 /* .fi
 /* .IP "\fBsmtpd_tls_CAfile (empty)\fR"
 /*     The file with the certificate of the certification authority
 /*     (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"
 /*     Ask a remote SMTP client for a client certificate.
 /* .IP "\fBsmtpd_tls_auth_only (no)\fR"
 /* .PP
 /*     Available in Postfix version 2.3 and later:
 /* .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.
 /* .PP
 /*     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_req_ccert;
 int     var_smtpd_tls_scache_timeout;
+bool    var_smtpd_tls_set_sessid;
 int     var_tls_daemon_rand_bytes;
 
 #endif
@@ -1520,7 +1531,7 @@ static void helo_reset(SMTPD_STATE *state)
     if (state->helo_name) {
        myfree(state->helo_name);
        state->helo_name = 0;
-       if (smtpd_milters)
+       if (SMTPD_STAND_ALONE(state) == 0 && smtpd_milters != 0)
            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",
                        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",
                        MAIL_ATTR_ACT_CLIENT_ADDR, state->addr);
            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");
                return (-1);
            }
+           vstring_strcpy(state->dsn_orcpt_buf, arg + 6);
            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
-               || *(dsn_orcpt_type = arg + 6) == 0) {
+               || *(dsn_orcpt_type = STR(state->dsn_orcpt_buf)) == 0) {
                state->error_mask |= MAIL_ERROR_PROTOCOL;
                smtpd_chat_reply(state,
                             "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.cache_type = TLS_MGR_SCACHE_SMTPD;
            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.key_file = var_smtpd_tls_key_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");
 
            props.cipherlist =
-               tls_cipher_list(enforce_tls ?
-                                   tls_cipher_level(var_smtpd_tls_mand_ciph) :
-                                   TLS_CIPHER_EXPORT,
+               tls_cipher_list(enforce_tls ?
+                               tls_cipher_level(var_smtpd_tls_mand_ciph) :
+                               TLS_CIPHER_EXPORT,
                                var_smtpd_tls_excl_ciph,
                                havecert ? "" : "aRSA aDSS",
                                wantcert ? "aNULL" : "",
-                               enforce_tls ?  var_smtpd_tls_mand_excl :
-                                   TLS_END_EXCLUDE,
+                               enforce_tls ? var_smtpd_tls_mand_excl :
+                               TLS_END_EXCLUDE,
                                TLS_END_EXCLUDE);
 
            if (props.cipherlist == 0) {
@@ -4268,8 +4283,8 @@ static void pre_jail_init(char *unused_name, char **unused_argv)
                                    var_smtpd_tls_excl_ciph,
                                    havecert ? "" : "aRSA aDSS",
                                    wantcert ? "aNULL" : "",
-                                   enforce_tls ?  var_smtpd_tls_mand_excl :
-                                       TLS_END_EXCLUDE,
+                                   enforce_tls ? var_smtpd_tls_mand_excl :
+                                   TLS_END_EXCLUDE,
                                    TLS_END_EXCLUDE);
            }
            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_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_SET_SESSID, DEF_SMTPD_TLS_SET_SESSID, &var_smtpd_tls_set_sessid,
 #endif
        VAR_SMTPD_PEERNAME_LOOKUP, DEF_SMTPD_PEERNAME_LOOKUP, &var_smtpd_peername_lookup,
        VAR_SMTPD_DELAY_OPEN, DEF_SMTPD_DELAY_OPEN, &var_smtpd_delay_open,
index 6f3f324d2ed24aa29922de25445c71a2c7caa1d4..44478605c69d655600ede3cbc59a3e8a0f63d8c3 100644 (file)
@@ -145,6 +145,7 @@ typedef struct SMTPD_STATE {
     char   *dsn_envid;                 /* temporary MAIL FROM state */
     int     dsn_ret;                   /* temporary MAIL FROM state */
     VSTRING *dsn_buf;                  /* scratch space for xtext expansion */
+    VSTRING *dsn_orcpt_buf;            /* scratch space for ORCPT parsing */
 
     /*
      * Pass-through proxy client.
index bf322c949ce00d96e2ea3e585127ac2047a4406a..2b4df40a934f77ab434f247ad6c419a878bcaaec 100644 (file)
@@ -78,6 +78,15 @@ const char *smtpd_milter_eval(const char *name, void *ptr)
     /*
      * 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)
        return (var_myhostname);
     if (strcmp(name, S8_MAC_CLIENT_ADDR) == 0)
index fd8fb56406e3dd8ba195b9bb8350fd149998e727..1f8092dbfcea7deca414b559edd274acf65d16d0 100644 (file)
@@ -137,6 +137,7 @@ void    smtpd_state_init(SMTPD_STATE *state, VSTREAM *stream,
 #endif
     state->dsn_envid = 0;
     state->dsn_buf = vstring_alloc(100);
+    state->dsn_orcpt_buf = vstring_alloc(100);
 #ifdef USE_TLS
     state->tls_use_tls = 0;
     state->tls_enforce_tls = 0;
@@ -212,6 +213,8 @@ void    smtpd_state_reset(SMTPD_STATE *state)
        vstring_free(state->instance);
     if (state->dsn_buf)
        vstring_free(state->dsn_buf);
+    if (state->dsn_orcpt_buf)
+       vstring_free(state->dsn_orcpt_buf);
 
 #ifdef USE_SASL_AUTH
     if (var_smtpd_sasl_enable)
index 8bee86f5dadb65ac7c81fbe815cc6bccab725535..f1370232703ffd56621b6386ab6e538387c7574e 100644 (file)
@@ -17,7 +17,7 @@
 #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.
   */
 #define TLS_LEV_NOTFOUND       -1      /* sentinel */
@@ -174,6 +174,7 @@ typedef struct {
     int     verifydepth;
     const char *cache_type;
     long    scache_timeout;
+    int     set_sessid;
     const char *cert_file;
     const char *key_file;
     const char *dcert_file;
index bc7e8aefa0bb4f9c1be179ca2716c62c5690ed7f..3c6dac341a458b4766574c342bcb7d45c9be31de 100644 (file)
@@ -447,7 +447,7 @@ SSL_CTX *tls_server_init(const tls_server_props *props)
        tls_print_errors();
        cachable = 0;
     }
-    if (cachable) {
+    if (cachable || props->set_sessid) {
 
        /*
         * 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_SESS_CACHE_SERVER |
                                       SSL_SESS_CACHE_NO_AUTO_CLEAR);
-       SSL_CTX_sess_set_get_cb(server_ctx, get_server_session_cb);
-       SSL_CTX_sess_set_new_cb(server_ctx, new_server_session_cb);
+       if (cachable) {
+           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