From: Wietse Venema
Date: Tue, 19 May 2009 05:00:00 +0000 (-0500)
Subject: postfix-2.7-20090519
X-Git-Tag: v2.7.0-RC1~23
X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6d9a9adc5c2e2f2aa2d25242b076a9473fd1aa46;p=thirdparty%2Fpostfix.git
postfix-2.7-20090519
---
diff --git a/postfix/HISTORY b/postfix/HISTORY
index b1e691391..dd04f009a 100644
--- a/postfix/HISTORY
+++ b/postfix/HISTORY
@@ -14855,7 +14855,7 @@ Apologies for any names omitted.
Bugfix (introduced May 19, 1997): removing a parameter
setting from main.cf did not reset the parameter to its
default value. This was a problem only in the master daemon.
- File: global/mail_params.c, master/master_vars.c.
+ File: global/mail_conf.c, master/master_vars.c.
20090109
@@ -15220,3 +15220,25 @@ Apologies for any names omitted.
Code cleanups: don't clobber -o command-line arguments so
that Linux people can debug daemon command lines more easily.
Files: master/*server.c.
+
+20090513
+
+ Code cleanups: better parsing of Postfix daemon "-o"
+ command-line options, with better error handling. Files:
+ master/*server.c.
+
+20090518
+
+ Documentation: missing dummy entries for lmtp_mumble_checks.
+ File: proto/postconf.proto.
+
+20090519
+
+ Bugfix (introduced: Postfix 2.3, but did not cause trouble
+ until 20090427). Queue file corruption with (smtpd_milters
+ or non_smtpd_milters) enabled, AND with delay_warning_time
+ enabled, AND with short envelope sender addresses (e.g.,
+ local submissions with bare usernames, but not bounces).
+ The queue file would be corrupted when the delay_warning_time
+ record was marked as "done" after sending the "your mail
+ is delayed" notice. File: qmgr/qmgr_message.c.
diff --git a/postfix/README_FILES/MILTER_README b/postfix/README_FILES/MILTER_README
index 5dceb11e6..87996fe3f 100644
--- a/postfix/README_FILES/MILTER_README
+++ b/postfix/README_FILES/MILTER_README
@@ -468,7 +468,7 @@ WWoorrkkaarroouunnddss
queue ID in the message header.
To fix the ugly message header, you will need to add code that looks up the
- Postfix queue ID at some later point im time. The example below adds the
+ Postfix queue ID at some later point in time. The example below adds the
lookup after the end-of-message.
o Edit the filter source file (typically named xxx-filter/xxx-filter.c or
diff --git a/postfix/RELEASE_NOTES-2.6 b/postfix/RELEASE_NOTES-2.6
index 4433a5c55..0a926aa38 100644
--- a/postfix/RELEASE_NOTES-2.6
+++ b/postfix/RELEASE_NOTES-2.6
@@ -42,14 +42,9 @@ and more:
Best of all, nothing changes when you use only one Postfix instance.
-The postfix-wrapper script (in the daemon directory) implements a
-simple but useful multi-instance manager, with instructions. The
-plug-in API itself is described in the postfix-wrapper(5) manpage.
-
-A more sophisticated multi-instance manager called postmulti(1) is
-approaching completion. A prototype version has been used internally
-at Morgan Stanley. This version will be adapted to the new plug-in
-API which makes some simplification possible.
+The MULTI_INSTANCE_README file presents an introduction to
+multi-instance management. Multi-instance support is based on an
+API that is described in the postfix-wrapper(5) manual page.
Major changes - milter support
------------------------------
diff --git a/postfix/WISHLIST b/postfix/WISHLIST
index d769972fa..3a097008f 100644
--- a/postfix/WISHLIST
+++ b/postfix/WISHLIST
@@ -2,6 +2,21 @@ Wish list:
Remove this file from the stable release.
+ The cleanup server rejects mail with REC_TYPE_DRCP (recipient
+ deleted by Milter). What happens after "postsuper -r" with
+ such mail? If it is rejected, the mail is discarded.
+
+ With "mixed recipient and other" queue files that have many
+ recpients, can qmgr_message_read() set message->rcpt_offset
+ multiple times? If it does, then recipients will be skipped.
+
+ Apply header_checks and body_checks when Milters add or
+ modify the message content. Use case: Milters that add
+ spamminess headers.
+
+ Update FILTER_README for multi-instance support, and rename
+ the old document to FILTER_LEGACY_README.
+
Need to sign delivery status notifications, to avoid surprises
when eventually people start enforcing DKIM etc. signatures.
diff --git a/postfix/html/MILTER_README.html b/postfix/html/MILTER_README.html
index 5aa69c06d..f4f7512ef 100644
--- a/postfix/html/MILTER_README.html
+++ b/postfix/html/MILTER_README.html
@@ -718,7 +718,7 @@ version 1.0.0 no longer includes the queue ID in the message header.
To fix the ugly message header, you will need to add code that
-looks up the Postfix queue ID at some later point im time. The
+looks up the Postfix queue ID at some later point in time. The
example below adds the lookup after the end-of-message.
diff --git a/postfix/html/pcre_table.5.html b/postfix/html/pcre_table.5.html
index 9db86451e..a15207d0b 100644
--- a/postfix/html/pcre_table.5.html
+++ b/postfix/html/pcre_table.5.html
@@ -104,7 +104,7 @@ PCRE_TABLE(5) PCRE_TABLE(5)
s (default: on)
Toggles the PCRE_DOTALL flag. When this flag is on,
the . metacharacter matches the newline character.
- With Postfix versions prior to 2.0, The flag is off
+ With Postfix versions prior to 2.0, the flag is off
by default, which is inconvenient for multi-line
message header matching.
diff --git a/postfix/html/postconf.5.html b/postfix/html/postconf.5.html
index 49287c76f..48940dc62 100644
--- a/postfix/html/postconf.5.html
+++ b/postfix/html/postconf.5.html
@@ -3478,6 +3478,17 @@ parameter. See there for details.
This feature is available in Postfix 2.3 and later.
+
+
+- lmtp_body_checks
+(default: empty)
-
+
+
The LMTP-specific version of the smtp_body_checks configuration
+parameter. See there for details.
+
+ This feature is available in Postfix 2.5 and later.
+
+
- lmtp_cache_connection
@@ -3753,6 +3764,17 @@ parameter. See there for details.
This feature is available in Postfix 2.3 and later.
+
+
+- lmtp_header_checks
+(default: empty)
-
+
+
The LMTP-specific version of the smtp_header_checks configuration
+parameter. See there for details.
+
+ This feature is available in Postfix 2.5 and later.
+
+
- lmtp_host_lookup
@@ -3835,6 +3857,17 @@ The default time unit is s (seconds).
+
+
+
- lmtp_mime_header_checks
+(default: empty)
-
+
+
The LMTP-specific version of the smtp_mime_header_checks
+configuration parameter. See there for details.
+
+ This feature is available in Postfix 2.5 and later.
+
+
- lmtp_mx_address_limit
@@ -3857,6 +3890,17 @@ parameter. See there for details.
This feature is available in Postfix 2.3 and later.
+
+
+- lmtp_nested_header_checks
+(default: empty)
-
+
+
The LMTP-specific version of the smtp_nested_header_checks
+configuration parameter. See there for details.
+
+ This feature is available in Postfix 2.5 and later.
+
+
- lmtp_pix_workaround_delay_time
diff --git a/postfix/html/postfix-wrapper.5.html b/postfix/html/postfix-wrapper.5.html
index 645ab28ca..925fd207e 100644
--- a/postfix/html/postfix-wrapper.5.html
+++ b/postfix/html/postfix-wrapper.5.html
@@ -22,18 +22,17 @@ POSTFIX-WRAPPER(5) POSTFIX-WRAPPER(5)
multi-instance manager program.
With multi-instance support, the default Postfix instance
- is always required. The config_directory parameter's
- default value specifies that instance's configuration file
- location.
+ is always required. This instance is identified by the
+ config_directory parameter's default value.
GENERAL OPERATION
- Multi-instance support is backwards compatible: when you
- run only one Postfix instance, commands such as "postfix
+ Multi-instance support is backwards compatible: when you
+ run only one Postfix instance, commands such as "postfix
start" will not change behavior at all.
- Even with multiple Postfix instances, you can keep using
- the same postfix commands in boot scripts, upgrade proce-
- dures, and other places. The commands do more work, but
+ Even with multiple Postfix instances, you can keep using
+ the same postfix commands in boot scripts, upgrade proce-
+ dures, and other places. The commands do more work, but
humans are not forced to learn new tricks.
For example, to start all Postfix instances, use:
@@ -41,7 +40,7 @@ POSTFIX-WRAPPER(5) POSTFIX-WRAPPER(5)
# postfix start
Other postfix(1) commands also work as expected. For exam-
- ple, to find out what Postfix instances exist in a multi-
+ ple, to find out what Postfix instances exist in a multi-
instance configuration, use:
# postfix status
@@ -55,58 +54,58 @@ POSTFIX-WRAPPER(5) POSTFIX-WRAPPER(5)
# postfix -c /path/to/config_directory command
- Alternatively, the postfix(1) command accepts the
- instance's configuration directory via the MAIL_CONFIG
+ Alternatively, the postfix(1) command accepts the
+ instance's configuration directory via the MAIL_CONFIG
environment variable (the -c command-line option has
higher precedence).
- When no Postfix instance information is specified, the
- postfix(1) command will operate on all Postfix instances.
+ When no Postfix instance information is specified, the
+ postfix(1) command will operate on all Postfix instances.
ENABLING POSTFIX(1) MULTI-INSTANCE MODE
- By default, the postfix(1) command operates in single-
- instance mode. In this mode the command invokes the post-
- fix-script file directly (currently installed in the dae-
- mon directory). This file contains the commands that
- start or stop one Postfix instance, that upgrade the con-
+ By default, the postfix(1) command operates in single-
+ instance mode. In this mode the command invokes the post-
+ fix-script file directly (currently installed in the dae-
+ mon directory). This file contains the commands that
+ start or stop one Postfix instance, that upgrade the con-
figuration of one Postfix instance, and so on.
- When the postfix(1) command operates in multi-instance
- mode as discussed below, the command needs to execute
- start, stop, etc. commands for each Postfix instance.
- This multiplication of commands is handled by a multi-
+ When the postfix(1) command operates in multi-instance
+ mode as discussed below, the command needs to execute
+ start, stop, etc. commands for each Postfix instance.
+ This multiplication of commands is handled by a multi-
instance manager program.
Turning on postfix(1) multi-instance mode goes as follows:
in the default Postfix instance's main.cf file, 1) specify
- the pathname of a multi-instance manager program with the
- multi_instance_wrapper parameter; 2) populate the
- multi_instance_directories parameter with the configura-
- tion directory pathnames of additional Postfix instances.
+ the pathname of a multi-instance manager program with the
+ multi_instance_wrapper parameter; 2) populate the
+ multi_instance_directories parameter with the configura-
+ tion directory pathnames of additional Postfix instances.
For example:
/etc/postfix/main.cf:
multi_instance_wrapper = $daemon_directory/postfix-wrapper
multi_instance_directories = /etc/postfix-test
- The $daemon_directory/postfix-wrapper file implements a
- simple manager and contains instructions for creating
- Postfix instances by hand. The postmulti(1) command pro-
- vides a more extensive implementation including support
+ The $daemon_directory/postfix-wrapper file implements a
+ simple manager and contains instructions for creating
+ Postfix instances by hand. The postmulti(1) command pro-
+ vides a more extensive implementation including support
for life-cycle management.
- The multi_instance_directories and other main.cf parame-
+ The multi_instance_directories and other main.cf parame-
ters are listed below in the CONFIGURATION PARAMETERS sec-
tion.
In multi-instance mode, the postfix(1) command invokes the
- $multi_instance_wrapper command instead of the postfix-
- script file. This multi-instance manager in turn executes
- the postfix(1) command in single-instance mode for each
+ $multi_instance_wrapper command instead of the postfix-
+ script file. This multi-instance manager in turn executes
+ the postfix(1) command in single-instance mode for each
Postfix instance.
- To illustrate the main ideas behind multi-instance opera-
- tion, below is an example of a simple but useful multi-
+ To illustrate the main ideas behind multi-instance opera-
+ tion, below is an example of a simple but useful multi-
instance manager implementation:
#!/bin/sh
@@ -140,124 +139,124 @@ POSTFIX-WRAPPER(5) POSTFIX-WRAPPER(5)
PER-INSTANCE MULTI-INSTANCE MANAGER CONTROLS
Each Postfix instance has its own main.cf file with param-
eters that control how the multi-instance manager operates
- on that instance. This section discusses the most impor-
+ on that instance. This section discusses the most impor-
tant settings.
The setting "multi_instance_enable = yes" allows the
- multi-instance manager to start (stop, etc.) the corre-
- sponding Postfix instance. For safety reasons, this set-
+ multi-instance manager to start (stop, etc.) the corre-
+ sponding Postfix instance. For safety reasons, this set-
ting is not the default.
The default setting "multi_instance_enable = no" is useful
for manual testing with "postfix -c /path/name start" etc.
- The multi-instance manager will not start such an
- instance, and it will skip commands such as "stop" or
- "flush" that require a running Postfix instance. The
+ The multi-instance manager will not start such an
+ instance, and it will skip commands such as "stop" or
+ "flush" that require a running Postfix instance. The
multi-instance manager will execute commands such as
"check", "set-permissions" or "upgrade-configuration", and
- it will replace "start" by "check" so that problems will
+ it will replace "start" by "check" so that problems will
be reported even when the instance is disabled.
MAINTAINING SHARED AND NON-SHARED FILES
- Some files are shared between Postfix instances, such as
+ Some files are shared between Postfix instances, such as
executables and manpages, and some files are per-instance,
- such as configuration files, mail queue files, and data
- files. See the NON-SHARED FILES section below for a list
+ such as configuration files, mail queue files, and data
+ files. See the NON-SHARED FILES section below for a list
of per-instance files.
Before Postfix multi-instance support was implemented, the
- executables, manpages, etc., have always been maintained
+ executables, manpages, etc., have always been maintained
as part of the default Postfix instance.
- With multi-instance support, we simply continue to do
- this. Specifically, a Postfix instance will not check or
- update shared files when that instance's config_directory
- value is listed with the default main.cf file's
+ With multi-instance support, we simply continue to do
+ this. Specifically, a Postfix instance will not check or
+ update shared files when that instance's config_directory
+ value is listed with the default main.cf file's
multi_instance_directories parameter.
The consequence of this approach is that the default Post-
- fix instance should be checked and updated before any
+ fix instance should be checked and updated before any
other instances.
MULTI-INSTANCE API SUMMARY
Only the multi-instance manager implements support for the
- multi_instance_enable configuration parameter. The multi-
- instance manager will start only Postfix instances whose
- main.cf file has "multi_instance_enable = yes". A setting
+ multi_instance_enable configuration parameter. The multi-
+ instance manager will start only Postfix instances whose
+ main.cf file has "multi_instance_enable = yes". A setting
of "no" allows a Postfix instance to be tested by hand.
The postfix(1) command operates on only one Postfix
- instance when the -c option is specified, or when
+ instance when the -c option is specified, or when
MAIL_CONFIG is present in the process environment. This is
necessary to terminate recursion.
- Otherwise, when the multi_instance_directories parameter
- value is non-empty, the postfix(1) command executes the
- command specified with the multi_instance_wrapper parame-
- ter, instead of executing the commands in postfix-script.
+ Otherwise, when the multi_instance_directories parameter
+ value is non-empty, the postfix(1) command executes the
+ command specified with the multi_instance_wrapper parame-
+ ter, instead of executing the commands in postfix-script.
- The multi-instance manager skips commands such as "stop"
- or "reload" that require a running Postfix instance, when
- an instance does not have "multi_instance_enable = yes".
+ The multi-instance manager skips commands such as "stop"
+ or "reload" that require a running Postfix instance, when
+ an instance does not have "multi_instance_enable = yes".
This avoids false error messages.
- The multi-instance manager replaces a "start" command by
- "check" when a Postfix instance's main.cf file does not
+ The multi-instance manager replaces a "start" command by
+ "check" when a Postfix instance's main.cf file does not
have "multi_instance_enable = yes". This substitution
- ensures that problems will be reported even when the
+ ensures that problems will be reported even when the
instance is disabled.
- No Postfix command or script will update or check shared
- files when its config_directory value is listed in the
- default main.cf's multi_instance_directories parameter
- value. Therefore, the default instance should be checked
- and updated before any Postfix instances that depend on
+ No Postfix command or script will update or check shared
+ files when its config_directory value is listed in the
+ default main.cf's multi_instance_directories parameter
+ value. Therefore, the default instance should be checked
+ and updated before any Postfix instances that depend on
it.
- Set-gid commands such as postdrop(1) and postqueue(1)
- effectively append the multi_instance_directories parame-
- ter value to the legacy alternate_config_directories
- parameter value. The commands use this information to
- determine whether a -c option or MAIL_CONFIG environment
+ Set-gid commands such as postdrop(1) and postqueue(1)
+ effectively append the multi_instance_directories parame-
+ ter value to the legacy alternate_config_directories
+ parameter value. The commands use this information to
+ determine whether a -c option or MAIL_CONFIG environment
setting specifies a legitimate value.
- The legacy alternate_config_directories parameter remains
- necessary for non-default Postfix instances that are run-
- ning different versions of Postfix, or that are not man-
+ The legacy alternate_config_directories parameter remains
+ necessary for non-default Postfix instances that are run-
+ ning different versions of Postfix, or that are not man-
aged together with the default Postfix instance.
ENVIRONMENT VARIABLES
MAIL_CONFIG
When present, this forces the postfix(1) command to
- operate only on the specified Postfix instance.
- This environment variable is exported by the post-
- fix(1) -c option, so that postfix(1) commands in
+ operate only on the specified Postfix instance.
+ This environment variable is exported by the post-
+ fix(1) -c option, so that postfix(1) commands in
descendant processes will work correctly.
CONFIGURATION PARAMETERS
- The text below provides only a parameter summary. See
+ The text below provides only a parameter summary. See
postconf(5) for more details.
multi_instance_directories (empty)
- An optional list of non-default Postfix configura-
+ An optional list of non-default Postfix configura-
tion directories; these directories belong to addi-
- tional Postfix instances that share the Postfix
+ tional Postfix instances that share the Postfix
executable files and documentation with the default
- Postfix instance, and that are started, stopped,
+ Postfix instance, and that are started, stopped,
etc., together with the default Postfix instance.
multi_instance_wrapper (empty)
- The pathname of a multi-instance manager command
- that the postfix(1) command invokes when the
- multi_instance_directories parameter value is non-
+ The pathname of a multi-instance manager command
+ that the postfix(1) command invokes when the
+ multi_instance_directories parameter value is non-
empty.
multi_instance_name (empty)
- The optional instance name of this Postfix
+ The optional instance name of this Postfix
instance.
multi_instance_group (empty)
- The optional instance group name of this Postfix
+ The optional instance group name of this Postfix
instance.
multi_instance_enable (no)
@@ -266,7 +265,7 @@ POSTFIX-WRAPPER(5) POSTFIX-WRAPPER(5)
NON-SHARED FILES
config_directory (see 'postconf -d' output)
- The default location of the Postfix main.cf and
+ The default location of the Postfix main.cf and
master.cf configuration files.
data_directory (see 'postconf -d' output)
@@ -274,7 +273,7 @@ POSTFIX-WRAPPER(5) POSTFIX-WRAPPER(5)
example: caches, pseudo-random numbers).
queue_directory (see 'postconf -d' output)
- The location of the Postfix top-level queue direc-
+ The location of the Postfix top-level queue direc-
tory.
SEE ALSO
@@ -283,7 +282,7 @@ POSTFIX-WRAPPER(5) POSTFIX-WRAPPER(5)
$daemon_directory/postfix-wrapper simple multi-instance manager
LICENSE
- The Secure Mailer license must be distributed with this
+ The Secure Mailer license must be distributed with this
software.
AUTHOR(S)
diff --git a/postfix/man/man5/pcre_table.5 b/postfix/man/man5/pcre_table.5
index f7b57a187..71bc0ad27 100644
--- a/postfix/man/man5/pcre_table.5
+++ b/postfix/man/man5/pcre_table.5
@@ -95,7 +95,7 @@ matching at the start and end of the subject string.
.IP "\fBs\fR (default: on)"
Toggles the PCRE_DOTALL flag. When this flag is on, the \fB.\fR
metacharacter matches the newline character. With
-Postfix versions prior to 2.0, The flag is off by
+Postfix versions prior to 2.0, the flag is off by
default, which is inconvenient for multi-line message header
matching.
.IP "\fBx\fR (default: off)"
diff --git a/postfix/man/man5/postconf.5 b/postfix/man/man5/postconf.5
index 298ae5921..ec635793a 100644
--- a/postfix/man/man5/postconf.5
+++ b/postfix/man/man5/postconf.5
@@ -1928,6 +1928,11 @@ The LMTP-specific version of the smtp_bind_address6 configuration
parameter. See there for details.
.PP
This feature is available in Postfix 2.3 and later.
+.SH lmtp_body_checks (default: empty)
+The LMTP-specific version of the smtp_body_checks configuration
+parameter. See there for details.
+.PP
+This feature is available in Postfix 2.5 and later.
.SH lmtp_cache_connection (default: yes)
Keep Postfix LMTP client connections open for up to $max_idle
seconds. When the LMTP client receives a request for the same
@@ -2076,6 +2081,11 @@ The LMTP-specific version of the smtp_generic_maps configuration
parameter. See there for details.
.PP
This feature is available in Postfix 2.3 and later.
+.SH lmtp_header_checks (default: empty)
+The LMTP-specific version of the smtp_header_checks configuration
+parameter. See there for details.
+.PP
+This feature is available in Postfix 2.5 and later.
.SH lmtp_host_lookup (default: dns)
The LMTP-specific version of the smtp_host_lookup configuration
parameter. See there for details.
@@ -2120,6 +2130,11 @@ for receiving the server response.
.PP
Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks).
The default time unit is s (seconds).
+.SH lmtp_mime_header_checks (default: empty)
+The LMTP-specific version of the smtp_mime_header_checks
+configuration parameter. See there for details.
+.PP
+This feature is available in Postfix 2.5 and later.
.SH lmtp_mx_address_limit (default: 5)
The LMTP-specific version of the smtp_mx_address_limit configuration
parameter. See there for details.
@@ -2130,6 +2145,11 @@ The LMTP-specific version of the smtp_mx_session_limit configuration
parameter. See there for details.
.PP
This feature is available in Postfix 2.3 and later.
+.SH lmtp_nested_header_checks (default: empty)
+The LMTP-specific version of the smtp_nested_header_checks
+configuration parameter. See there for details.
+.PP
+This feature is available in Postfix 2.5 and later.
.SH lmtp_pix_workaround_delay_time (default: 10s)
The LMTP-specific version of the smtp_pix_workaround_delay_time
configuration parameter. See there for details.
diff --git a/postfix/man/man5/postfix-wrapper.5 b/postfix/man/man5/postfix-wrapper.5
index f2a1a71a8..d43a0a990 100644
--- a/postfix/man/man5/postfix-wrapper.5
+++ b/postfix/man/man5/postfix-wrapper.5
@@ -20,8 +20,8 @@ activities between the postfix(1) command and a multi-instance
manager program.
With multi-instance support, the default Postfix instance
-is always required. The config_directory parameter's default
-value specifies that instance's configuration file location.
+is always required. This instance is identified by the
+config_directory parameter's default value.
.SH "GENERAL OPERATION"
.na
.nf
diff --git a/postfix/proto/MILTER_README.html b/postfix/proto/MILTER_README.html
index 41f6938c3..7bd2a7135 100644
--- a/postfix/proto/MILTER_README.html
+++ b/postfix/proto/MILTER_README.html
@@ -718,7 +718,7 @@ version 1.0.0 no longer includes the queue ID in the message header.
To fix the ugly message header, you will need to add code that
-looks up the Postfix queue ID at some later point im time. The
+looks up the Postfix queue ID at some later point in time. The
example below adds the lookup after the end-of-message.
diff --git a/postfix/proto/pcre_table b/postfix/proto/pcre_table
index 3c21a4ade..5ae105ba4 100644
--- a/postfix/proto/pcre_table
+++ b/postfix/proto/pcre_table
@@ -85,7 +85,7 @@
# .IP "\fBs\fR (default: on)"
# Toggles the PCRE_DOTALL flag. When this flag is on, the \fB.\fR
# metacharacter matches the newline character. With
-# Postfix versions prior to 2.0, The flag is off by
+# Postfix versions prior to 2.0, the flag is off by
# default, which is inconvenient for multi-line message header
# matching.
# .IP "\fBx\fR (default: off)"
diff --git a/postfix/proto/postconf.proto b/postfix/proto/postconf.proto
index e1139ec33..3b2ff6102 100644
--- a/postfix/proto/postconf.proto
+++ b/postfix/proto/postconf.proto
@@ -12269,3 +12269,32 @@ when not present. Postfix 2.6 and later add these headers only
when clients match the local_header_rewrite_clients parameter
setting. Earlier Postfix versions always add these headers; this
may break DKIM signatures that cover non-existent headers.
+
+%PARAM lmtp_header_checks
+
+ The LMTP-specific version of the smtp_header_checks configuration
+parameter. See there for details.
+
+ This feature is available in Postfix 2.5 and later.
+
+%PARAM lmtp_mime_header_checks
+
+ The LMTP-specific version of the smtp_mime_header_checks
+configuration parameter. See there for details.
+
+ This feature is available in Postfix 2.5 and later.
+
+%PARAM lmtp_nested_header_checks
+
+ The LMTP-specific version of the smtp_nested_header_checks
+configuration parameter. See there for details.
+
+ This feature is available in Postfix 2.5 and later.
+
+%PARAM lmtp_body_checks
+
+ The LMTP-specific version of the smtp_body_checks configuration
+parameter. See there for details.
+
+ This feature is available in Postfix 2.5 and later.
+
diff --git a/postfix/proto/postfix-wrapper b/postfix/proto/postfix-wrapper
index 8856448fc..abf3f56be 100644
--- a/postfix/proto/postfix-wrapper
+++ b/postfix/proto/postfix-wrapper
@@ -16,8 +16,8 @@
# manager program.
#
# With multi-instance support, the default Postfix instance
-# is always required. The config_directory parameter's default
-# value specifies that instance's configuration file location.
+# is always required. This instance is identified by the
+# config_directory parameter's default value.
# GENERAL OPERATION
# .ad
# .fi
diff --git a/postfix/src/cleanup/cleanup_envelope.c b/postfix/src/cleanup/cleanup_envelope.c
index 9ba1830dd..2253fa17a 100644
--- a/postfix/src/cleanup/cleanup_envelope.c
+++ b/postfix/src/cleanup/cleanup_envelope.c
@@ -385,8 +385,7 @@ static void cleanup_envelope_process(CLEANUP_STATE *state, int type,
cleanup_addr_sender(state, buf);
if (state->milters || cleanup_milters) {
/* Make room to replace sender. */
- if (len < REC_TYPE_PTR_PAYL_SIZE)
- rec_pad(state->dst, REC_TYPE_PTR, REC_TYPE_PTR_PAYL_SIZE - len);
+ rec_pad(state->dst, REC_TYPE_PTR, REC_TYPE_PTR_PAYL_SIZE);
/* Remember the after-sender record offset. */
if ((state->sender_pt_target = vstream_ftell(state->dst)) < 0)
msg_fatal("%s: vstream_ftell %s: %m:", myname, cleanup_path);
diff --git a/postfix/src/global/mail_version.h b/postfix/src/global/mail_version.h
index 25266dca4..b08b75bb6 100644
--- a/postfix/src/global/mail_version.h
+++ b/postfix/src/global/mail_version.h
@@ -20,7 +20,7 @@
* Patches change both the patchlevel and the release date. Snapshots have no
* patchlevel; they change the release date only.
*/
-#define MAIL_RELEASE_DATE "20090511"
+#define MAIL_RELEASE_DATE "20090519"
#define MAIL_VERSION_NUMBER "2.7"
#ifdef SNAPSHOT
diff --git a/postfix/src/master/multi_server.c b/postfix/src/master/multi_server.c
index 2641dd325..cd8159023 100644
--- a/postfix/src/master/multi_server.c
+++ b/postfix/src/master/multi_server.c
@@ -513,6 +513,7 @@ NORETURN multi_server_main(int argc, char **argv, MULTI_SERVER_FN service,...)
WATCHDOG *watchdog;
char *oname;
char *oval;
+ const char *err;
char *generation;
int msg_vstream_needed = 0;
int redo_syslog_init = 0;
@@ -591,10 +592,8 @@ NORETURN multi_server_main(int argc, char **argv, MULTI_SERVER_FN service,...)
service_name = optarg;
break;
case 'o':
- /* XXX Use split_nameval() */
- oname = mystrdup(optarg);
- if ((oval = split_at(oname, '=')) == 0)
- oval = "";
+ if ((err = split_nameval(mystrdup(optarg), &oname, &oval)) != 0)
+ msg_fatal("invalid \"-o %s\" option value: %s", optarg, err);
mail_conf_update(oname, oval);
if (strcmp(oname, VAR_SYSLOG_NAME) == 0)
redo_syslog_init = 1;
diff --git a/postfix/src/master/single_server.c b/postfix/src/master/single_server.c
index 99dfa218a..a984ac479 100644
--- a/postfix/src/master/single_server.c
+++ b/postfix/src/master/single_server.c
@@ -404,6 +404,7 @@ NORETURN single_server_main(int argc, char **argv, SINGLE_SERVER_FN service,...)
WATCHDOG *watchdog;
char *oname;
char *oval;
+ const char *err;
char *generation;
int msg_vstream_needed = 0;
int redo_syslog_init = 0;
@@ -482,10 +483,8 @@ NORETURN single_server_main(int argc, char **argv, SINGLE_SERVER_FN service,...)
service_name = optarg;
break;
case 'o':
- /* XXX Use split_nameval() */
- oname = mystrdup(optarg);
- if ((oval = split_at(oname, '=')) == 0)
- oval = "";
+ if ((err = split_nameval(mystrdup(optarg), &oname, &oval)) != 0)
+ msg_fatal("invalid \"-o %s\" option value: %s", optarg, err);
mail_conf_update(oname, oval);
if (strcmp(oname, VAR_SYSLOG_NAME) == 0)
redo_syslog_init = 1;
diff --git a/postfix/src/master/trigger_server.c b/postfix/src/master/trigger_server.c
index 279ce2ed9..62330f038 100644
--- a/postfix/src/master/trigger_server.c
+++ b/postfix/src/master/trigger_server.c
@@ -415,6 +415,7 @@ NORETURN trigger_server_main(int argc, char **argv, TRIGGER_SERVER_FN service,..
WATCHDOG *watchdog;
char *oname;
char *oval;
+ const char *err;
char *generation;
int msg_vstream_needed = 0;
int redo_syslog_init = 0;
@@ -493,10 +494,8 @@ NORETURN trigger_server_main(int argc, char **argv, TRIGGER_SERVER_FN service,..
service_name = optarg;
break;
case 'o':
- /* XXX Use split_nameval() */
- oname = mystrdup(optarg);
- if ((oval = split_at(oname, '=')) == 0)
- oval = "";
+ if ((err = split_nameval(mystrdup(optarg), &oname, &oval)) != 0)
+ msg_fatal("invalid \"-o %s\" option value: %s", optarg, err);
mail_conf_update(oname, oval);
if (strcmp(oname, VAR_SYSLOG_NAME) == 0)
redo_syslog_init = 1;
diff --git a/postfix/src/oqmgr/qmgr_message.c b/postfix/src/oqmgr/qmgr_message.c
index b3a7b15a1..27c5c92bb 100644
--- a/postfix/src/oqmgr/qmgr_message.c
+++ b/postfix/src/oqmgr/qmgr_message.c
@@ -366,10 +366,16 @@ static int qmgr_message_read(QMGR_MESSAGE *message)
msg_fatal("seek file %s: %m", VSTREAM_PATH(message->fp));
curr_offset += message->data_size;
}
- rec_type = rec_get(message->fp, buf, 0);
+ rec_type = rec_get_raw(message->fp, buf, 0, REC_FLAG_NONE);
start = vstring_str(buf);
if (msg_verbose > 1)
msg_info("record %c %s", rec_type, start);
+ if (rec_type == REC_TYPE_PTR) {
+ if ((rec_type = rec_goto(message->fp, start)) == REC_TYPE_ERROR)
+ break;
+ /* Need to update curr_offset after pointer jump. */
+ continue;
+ }
if (rec_type <= 0) {
msg_warn("%s: message rejected: missing end record",
message->queue_id);
diff --git a/postfix/src/qmgr/qmgr_message.c b/postfix/src/qmgr/qmgr_message.c
index 24a981ed7..a588d6791 100644
--- a/postfix/src/qmgr/qmgr_message.c
+++ b/postfix/src/qmgr/qmgr_message.c
@@ -406,10 +406,16 @@ static int qmgr_message_read(QMGR_MESSAGE *message)
msg_fatal("seek file %s: %m", VSTREAM_PATH(message->fp));
curr_offset += message->data_size;
}
- rec_type = rec_get(message->fp, buf, 0);
+ rec_type = rec_get_raw(message->fp, buf, 0, REC_FLAG_NONE);
start = vstring_str(buf);
if (msg_verbose > 1)
msg_info("record %c %s", rec_type, start);
+ if (rec_type == REC_TYPE_PTR) {
+ if ((rec_type = rec_goto(message->fp, start)) == REC_TYPE_ERROR)
+ break;
+ /* Need to update curr_offset after pointer jump. */
+ continue;
+ }
if (rec_type <= 0) {
msg_warn("%s: message rejected: missing end record",
message->queue_id);
diff --git a/postfix/src/smtpd/smtpd_proxy.c b/postfix/src/smtpd/smtpd_proxy.c
index cfefe7e3d..1df887cba 100644
--- a/postfix/src/smtpd/smtpd_proxy.c
+++ b/postfix/src/smtpd/smtpd_proxy.c
@@ -565,7 +565,7 @@ int smtpd_proxy_cmd(SMTPD_STATE *state, int expect, const char *fmt,...)
* Log a warning in case the proxy does not send the expected response.
* Silently accept any response when the client expressed no expectation.
*
- * Don't pass through misleading 2xx replies. it confuses naive users and
+ * Don't pass through misleading 2xx replies. It confuses naive users and
* SMTP clients, and creates support problems.
*/
if (expect != SMTPD_PROX_WANT_ANY && expect != *STR(state->proxy_buffer)) {
diff --git a/postfix/src/xsasl/xsasl_dovecot_server.c b/postfix/src/xsasl/xsasl_dovecot_server.c
index 4af958ebd..5fc1e0f7d 100644
--- a/postfix/src/xsasl/xsasl_dovecot_server.c
+++ b/postfix/src/xsasl/xsasl_dovecot_server.c
@@ -365,11 +365,16 @@ static void xsasl_dovecot_server_disconnect(XSASL_DOVECOT_SERVER_IMPL *xp)
/* xsasl_dovecot_server_init - create implementation handle */
-XSASL_SERVER_IMPL *xsasl_dovecot_server_init(const char *unused_server_type,
+XSASL_SERVER_IMPL *xsasl_dovecot_server_init(const char *server_type,
const char *path_info)
{
XSASL_DOVECOT_SERVER_IMPL *xp;
+ if (strchr(path_info, '/') == 0)
+ msg_warn("when SASL type is \"%s\", SASL path \"%s\" "
+ "should be a socket pathname",
+ server_type, path_info);
+
xp = (XSASL_DOVECOT_SERVER_IMPL *) mymalloc(sizeof(*xp));
xp->xsasl.create = xsasl_dovecot_server_create;
xp->xsasl.done = xsasl_dovecot_server_done;