mirror of
https://github.com/vdukhovni/postfix
synced 2025-08-31 14:17:41 +00:00
postfix-2.3-20050923
This commit is contained in:
committed by
Viktor Dukhovni
parent
9526ba7e60
commit
14313fe35c
@@ -11133,7 +11133,31 @@ Apologies for any names omitted.
|
|||||||
|
|
||||||
Update: common code factored out into db_common.c, and
|
Update: common code factored out into db_common.c, and
|
||||||
adoption of Liviu Daia's connection aware MySQL quoting.
|
adoption of Liviu Daia's connection aware MySQL quoting.
|
||||||
Files: dict_ldap.c, dict_mysql.c, dict_pgsql.c, db_common.c.
|
Patch by Victor Duchovni. Files: dict_ldap.c, dict_mysql.c,
|
||||||
|
dict_pgsql.c, db_common.c.
|
||||||
|
|
||||||
|
20050923
|
||||||
|
|
||||||
|
Safety: don't update the local(8) delivery agent's idea of
|
||||||
|
the Delivered-To: address while expanding aliases or .forward
|
||||||
|
files. When an alias or .forward file changes the Delivered-To:
|
||||||
|
address, it ties up one queue file and one cleanup process
|
||||||
|
instance while mail is being forwarded. To get the old
|
||||||
|
behavior, specify "frozen_delivered_to = no". Problem
|
||||||
|
reported by Michael Tokarev, but found independently by
|
||||||
|
others. Files: local/local.c, local/aliases.c, local/dotforward.c,
|
||||||
|
local/mailbox.c, local/maildir.c.
|
||||||
|
|
||||||
|
Cleanup: while expanding a local(8) alias that has an owner
|
||||||
|
alias, don't reset the owner-alias information when recursing
|
||||||
|
into an alias that has no owner alias. This produces better
|
||||||
|
error reports when delivering mail to nested aliases that
|
||||||
|
have an owner alias only at the top level. To get the old
|
||||||
|
behavior, specify "sticky_owner_alias = no". Problem
|
||||||
|
reported by Victor Duchovni. File: local/alias.c.
|
||||||
|
|
||||||
|
Logging: additional SASL debug logging by Andreas Winkelmann.
|
||||||
|
Files: */*sasl_glue.c.
|
||||||
|
|
||||||
Open problems:
|
Open problems:
|
||||||
|
|
||||||
|
@@ -17,6 +17,22 @@ Incompatibility with Postfix 2.1 and earlier
|
|||||||
If you upgrade from Postfix 2.1 or earlier, read RELEASE_NOTES-2.2
|
If you upgrade from Postfix 2.1 or earlier, read RELEASE_NOTES-2.2
|
||||||
before proceeding.
|
before proceeding.
|
||||||
|
|
||||||
|
Incompatibility with snapshot 20050923
|
||||||
|
======================================
|
||||||
|
|
||||||
|
The Postfix local(8) delivery agent no longer updates its idea of
|
||||||
|
the Delivered-To: address while it expands aliases or .forward
|
||||||
|
files. With deeply nested aliases or .forward files, this can greatly
|
||||||
|
reduce the number of queue files and cleanup process instances. To
|
||||||
|
get the earlier behavior, specify "frozen_delivered_to = no".
|
||||||
|
|
||||||
|
While expanding an alias that has an owner alias, the Postfix
|
||||||
|
local(8) delivery agent no longer resets the owner information when
|
||||||
|
it expands a subordinate alias that has no owner alias. This
|
||||||
|
produces better error reporting with nested aliases that have an
|
||||||
|
owner alias only at the top level. To get the earlier behavior,
|
||||||
|
specify "sticky_owner_alias = no".
|
||||||
|
|
||||||
Incompatibility with snapshot 20050828
|
Incompatibility with snapshot 20050828
|
||||||
======================================
|
======================================
|
||||||
|
|
||||||
|
@@ -87,10 +87,11 @@ decode: root
|
|||||||
#
|
#
|
||||||
# In addition, when an alias exists for owner-name, delivery
|
# In addition, when an alias exists for owner-name, delivery
|
||||||
# diagnostics are directed to that address, instead of to
|
# diagnostics are directed to that address, instead of to
|
||||||
# the originator. This is typically used to direct delivery
|
# the originator of the message. This is typically used to
|
||||||
# errors to the owner of a mailing list, who is in a better
|
# direct delivery errors to the maintainer of a mailing
|
||||||
# position to deal with mailing list delivery problems than
|
# list, who is in a better position to deal with mailing
|
||||||
# the originator of the undelivered mail.
|
# list delivery problems than the originator of the undeliv-
|
||||||
|
# ered mail.
|
||||||
#
|
#
|
||||||
# The value contains one or more of the following:
|
# The value contains one or more of the following:
|
||||||
#
|
#
|
||||||
@@ -191,6 +192,21 @@ decode: root
|
|||||||
# Delimiter that separates recipients from address
|
# Delimiter that separates recipients from address
|
||||||
# extensions.
|
# extensions.
|
||||||
#
|
#
|
||||||
|
# Available in Postfix version 2.3 and later:
|
||||||
|
#
|
||||||
|
# frozen_delivered_to
|
||||||
|
# Update the local(8) delivery agent's Delivered-To:
|
||||||
|
# address (see prepend_delivered_header) only once,
|
||||||
|
# at the start of a delivery; do not update the
|
||||||
|
# Delivered-To: address while expanding aliases or
|
||||||
|
# .forward files.
|
||||||
|
#
|
||||||
|
# sticky_owner_alias
|
||||||
|
# When expanding a local(8) alias that has an owner
|
||||||
|
# alias (see owner-name discussion above), use the
|
||||||
|
# owner information even when the expansion invokes a
|
||||||
|
# subordinate alias that has no owner alias.
|
||||||
|
#
|
||||||
# STANDARDS
|
# STANDARDS
|
||||||
# RFC 822 (ARPA Internet Text Messages)
|
# RFC 822 (ARPA Internet Text Messages)
|
||||||
#
|
#
|
||||||
|
@@ -55,10 +55,11 @@ ALIASES(5) ALIASES(5)
|
|||||||
|
|
||||||
In addition, when an alias exists for <b>owner-</b><i>name</i>, delivery
|
In addition, when an alias exists for <b>owner-</b><i>name</i>, delivery
|
||||||
diagnostics are directed to that address, instead of to
|
diagnostics are directed to that address, instead of to
|
||||||
the originator. This is typically used to direct delivery
|
the originator of the message. This is typically used to
|
||||||
errors to the owner of a mailing list, who is in a better
|
direct delivery errors to the maintainer of a mailing
|
||||||
position to deal with mailing list delivery problems than
|
list, who is in a better position to deal with mailing
|
||||||
the originator of the undelivered mail.
|
list delivery problems than the originator of the undeliv-
|
||||||
|
ered mail.
|
||||||
|
|
||||||
The <i>value</i> contains one or more of the following:
|
The <i>value</i> contains one or more of the following:
|
||||||
|
|
||||||
@@ -159,6 +160,21 @@ ALIASES(5) ALIASES(5)
|
|||||||
Delimiter that separates recipients from address
|
Delimiter that separates recipients from address
|
||||||
extensions.
|
extensions.
|
||||||
|
|
||||||
|
Available in Postfix version 2.3 and later:
|
||||||
|
|
||||||
|
<b><a href="postconf.5.html#frozen_delivered_to">frozen_delivered_to</a></b>
|
||||||
|
Update the <a href="local.8.html">local(8)</a> delivery agent's Delivered-To:
|
||||||
|
address (see <a href="postconf.5.html#prepend_delivered_header">prepend_delivered_header</a>) only once,
|
||||||
|
at the start of a delivery; do not update the
|
||||||
|
Delivered-To: address while expanding aliases or
|
||||||
|
.forward files.
|
||||||
|
|
||||||
|
<b><a href="postconf.5.html#sticky_owner_alias">sticky_owner_alias</a></b>
|
||||||
|
When expanding a <a href="local.8.html">local(8)</a> alias that has an owner
|
||||||
|
alias (see owner-<i>name</i> discussion above), use the
|
||||||
|
owner information even when the expansion invokes a
|
||||||
|
subordinate alias that has no owner alias.
|
||||||
|
|
||||||
<b>STANDARDS</b>
|
<b>STANDARDS</b>
|
||||||
<a href="http://www.faqs.org/rfcs/rfc822.html">RFC 822</a> (ARPA Internet Text Messages)
|
<a href="http://www.faqs.org/rfcs/rfc822.html">RFC 822</a> (ARPA Internet Text Messages)
|
||||||
|
|
||||||
|
@@ -377,6 +377,22 @@ LOCAL(8) LOCAL(8)
|
|||||||
<b><a href="postconf.5.html#sun_mailtool_compatibility">sun_mailtool_compatibility</a> (no)</b>
|
<b><a href="postconf.5.html#sun_mailtool_compatibility">sun_mailtool_compatibility</a> (no)</b>
|
||||||
Obsolete SUN mailtool compatibility feature.
|
Obsolete SUN mailtool compatibility feature.
|
||||||
|
|
||||||
|
Available in Postfix version 2.3 and later:
|
||||||
|
|
||||||
|
<b><a href="postconf.5.html#frozen_delivered_to">frozen_delivered_to</a> (yes)</b>
|
||||||
|
Update the <a href="local.8.html"><b>local</b>(8)</a> delivery agent's idea of the
|
||||||
|
Delivered-To: address (see prepend_deliv-
|
||||||
|
ered_header) only once, at the start of a delivery
|
||||||
|
attempt; do not update the Delivered-To: address
|
||||||
|
while expanding aliases or .forward files.
|
||||||
|
|
||||||
|
<b><a href="postconf.5.html#sticky_owner_alias">sticky_owner_alias</a> (yes)</b>
|
||||||
|
When expanding a <a href="local.8.html"><b>local</b>(8)</a> alias that has an owner
|
||||||
|
alias (see owner-<i>name</i> discussion in <a href="aliases.5.html"><b>aliases</b>(5)</a>),
|
||||||
|
use the owner information even when the expansion
|
||||||
|
invokes a subordinate alias that has no owner
|
||||||
|
alias.
|
||||||
|
|
||||||
<b>DELIVERY METHOD CONTROLS</b>
|
<b>DELIVERY METHOD CONTROLS</b>
|
||||||
The precedence of <a href="local.8.html"><b>local</b>(8)</a> delivery methods from high to
|
The precedence of <a href="local.8.html"><b>local</b>(8)</a> delivery methods from high to
|
||||||
low is: aliases, .forward files, <a href="postconf.5.html#mailbox_transport">mailbox_transport</a>, <a href="postconf.5.html#mailbox_command_maps">mail</a>-
|
low is: aliases, .forward files, <a href="postconf.5.html#mailbox_transport">mailbox_transport</a>, <a href="postconf.5.html#mailbox_command_maps">mail</a>-
|
||||||
@@ -536,7 +552,8 @@ LOCAL(8) LOCAL(8)
|
|||||||
<b><a href="postconf.5.html#prepend_delivered_header">prepend_delivered_header</a> (command, file, forward)</b>
|
<b><a href="postconf.5.html#prepend_delivered_header">prepend_delivered_header</a> (command, file, forward)</b>
|
||||||
The message delivery contexts where the Postfix
|
The message delivery contexts where the Postfix
|
||||||
<a href="local.8.html"><b>local</b>(8)</a> delivery agent prepends a Delivered-To:
|
<a href="local.8.html"><b>local</b>(8)</a> delivery agent prepends a Delivered-To:
|
||||||
message header.
|
message header with the address that the mail was
|
||||||
|
delivered to.
|
||||||
|
|
||||||
<b><a href="postconf.5.html#process_id">process_id</a> (read-only)</b>
|
<b><a href="postconf.5.html#process_id">process_id</a> (read-only)</b>
|
||||||
The process ID of a Postfix command or daemon
|
The process ID of a Postfix command or daemon
|
||||||
|
@@ -2474,6 +2474,24 @@ Examples:
|
|||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
|
|
||||||
|
</DD>
|
||||||
|
|
||||||
|
<DT><b><a name="frozen_delivered_to">frozen_delivered_to</a>
|
||||||
|
(default: yes)</b></DT><DD>
|
||||||
|
|
||||||
|
<p> Update the <a href="local.8.html">local(8)</a> delivery agent's idea of the Delivered-To:
|
||||||
|
address (see <a href="postconf.5.html#prepend_delivered_header">prepend_delivered_header</a>) only once, at the start of
|
||||||
|
a delivery attempt; do not update the Delivered-To: address while
|
||||||
|
expanding aliases or .forward files. </p>
|
||||||
|
|
||||||
|
<p> This feature is available in Postfix 2.3 and later. With older
|
||||||
|
Postfix releases, the behavior is as if this parameter is set to
|
||||||
|
"no". The old setting can be expensive with deeply nested aliases
|
||||||
|
or .forward files. When an alias or .forward file changes the
|
||||||
|
Delivered-To: address, it ties up one queue file and one cleanup
|
||||||
|
process instance while mail is being forwarded. </p>
|
||||||
|
|
||||||
|
|
||||||
</DD>
|
</DD>
|
||||||
|
|
||||||
<DT><b><a name="hash_queue_depth">hash_queue_depth</a>
|
<DT><b><a name="hash_queue_depth">hash_queue_depth</a>
|
||||||
@@ -4636,10 +4654,10 @@ This feature is available in Postfix 2.0 and later.
|
|||||||
<DT><b><a name="prepend_delivered_header">prepend_delivered_header</a>
|
<DT><b><a name="prepend_delivered_header">prepend_delivered_header</a>
|
||||||
(default: command, file, forward)</b></DT><DD>
|
(default: command, file, forward)</b></DT><DD>
|
||||||
|
|
||||||
<p>
|
<p> The message delivery contexts where the Postfix <a href="local.8.html">local(8)</a> delivery
|
||||||
The message delivery contexts where the Postfix <a href="local.8.html">local(8)</a> delivery
|
agent prepends a Delivered-To: message header with the address
|
||||||
agent prepends a Delivered-To: message header.
|
that the mail was delivered to. This information is used for mail
|
||||||
</p>
|
delivery loop detection. </p>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
By default, the Postfix local delivery agent prepends a Delivered-To:
|
By default, the Postfix local delivery agent prepends a Delivered-To:
|
||||||
@@ -9131,6 +9149,22 @@ The default time unit is s (seconds).
|
|||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
|
||||||
|
</DD>
|
||||||
|
|
||||||
|
<DT><b><a name="sticky_owner_alias">sticky_owner_alias</a>
|
||||||
|
(default: yes)</b></DT><DD>
|
||||||
|
|
||||||
|
<p> When expanding a <a href="local.8.html">local(8)</a> alias that has an owner alias (see
|
||||||
|
owner-<i>name</i> discussion in <a href="aliases.5.html">aliases(5)</a>), use the owner information
|
||||||
|
even when the expansion invokes a subordinate alias that has no
|
||||||
|
owner alias. </p>
|
||||||
|
|
||||||
|
<p> This feature is available in Postfix 2.3 and later. With older
|
||||||
|
Postfix releases, the behavior is as if this parameter is set to
|
||||||
|
"no". The old setting provides poorer error reporting with nested
|
||||||
|
aliases that only have an owner alias at the top level. </p>
|
||||||
|
|
||||||
|
|
||||||
</DD>
|
</DD>
|
||||||
|
|
||||||
<DT><b><a name="strict_7bit_headers">strict_7bit_headers</a>
|
<DT><b><a name="strict_7bit_headers">strict_7bit_headers</a>
|
||||||
|
@@ -51,6 +51,11 @@ QMQP-SOURCE(1) QMQP-SOURCE(1)
|
|||||||
<b>-m</b> <i>message</i><b>_</b><i>count</i>
|
<b>-m</b> <i>message</i><b>_</b><i>count</i>
|
||||||
Send the specified number of messages (default: 1).
|
Send the specified number of messages (default: 1).
|
||||||
|
|
||||||
|
<b>-M</b> <i><a href="postconf.5.html#myhostname">myhostname</a></i>
|
||||||
|
Use the specified hostname or [address] in the
|
||||||
|
default sender and recipient addresses, instead of
|
||||||
|
the machine hostname.
|
||||||
|
|
||||||
<b>-r</b> <i>recipient</i><b>_</b><i>count</i>
|
<b>-r</b> <i>recipient</i><b>_</b><i>count</i>
|
||||||
Send the specified number of recipients per trans-
|
Send the specified number of recipients per trans-
|
||||||
action (default: 1). Recipient names are generated
|
action (default: 1). Recipient names are generated
|
||||||
@@ -68,6 +73,9 @@ QMQP-SOURCE(1) QMQP-SOURCE(1)
|
|||||||
between messages. Suspending one thread does not
|
between messages. Suspending one thread does not
|
||||||
affect other delivery threads.
|
affect other delivery threads.
|
||||||
|
|
||||||
|
<b>-v</b> Make the program more verbose, for debugging pur-
|
||||||
|
poses.
|
||||||
|
|
||||||
<b>-w</b> <i>interval</i>
|
<b>-w</b> <i>interval</i>
|
||||||
Wait a fixed time between messages. Suspending one
|
Wait a fixed time between messages. Suspending one
|
||||||
thread does not affect other delivery threads.
|
thread does not affect other delivery threads.
|
||||||
|
@@ -48,9 +48,6 @@ SMTP-SOURCE(1) SMTP-SOURCE(1)
|
|||||||
Use the specified sender address (default:
|
Use the specified sender address (default:
|
||||||
<foo@<a href="postconf.5.html#myhostname">myhostname</a>>).
|
<foo@<a href="postconf.5.html#myhostname">myhostname</a>>).
|
||||||
|
|
||||||
<b>-o</b> Old mode: don't send HELO, and don't send message
|
|
||||||
headers.
|
|
||||||
|
|
||||||
<b>-l</b> <i>length</i>
|
<b>-l</b> <i>length</i>
|
||||||
Send <i>length</i> bytes as message payload. The length
|
Send <i>length</i> bytes as message payload. The length
|
||||||
does not include message headers.
|
does not include message headers.
|
||||||
@@ -60,6 +57,11 @@ SMTP-SOURCE(1) SMTP-SOURCE(1)
|
|||||||
<b>-m</b> <i>message</i><b>_</b><i>count</i>
|
<b>-m</b> <i>message</i><b>_</b><i>count</i>
|
||||||
Send the specified number of messages (default: 1).
|
Send the specified number of messages (default: 1).
|
||||||
|
|
||||||
|
<b>-M</b> <i><a href="postconf.5.html#myhostname">myhostname</a></i>
|
||||||
|
Use the specified hostname or [address] in the HELO
|
||||||
|
command and in the default sender and recipient
|
||||||
|
addresses, instead of the machine hostname.
|
||||||
|
|
||||||
<b>-N</b> Prepend a non-repeating sequence number to each
|
<b>-N</b> Prepend a non-repeating sequence number to each
|
||||||
recipient address. This avoids the artificial 100%
|
recipient address. This avoids the artificial 100%
|
||||||
hit rate in the resolve and rewrite client caches
|
hit rate in the resolve and rewrite client caches
|
||||||
@@ -67,6 +69,9 @@ SMTP-SOURCE(1) SMTP-SOURCE(1)
|
|||||||
approximating Postfix performance under real-life
|
approximating Postfix performance under real-life
|
||||||
work-loads.
|
work-loads.
|
||||||
|
|
||||||
|
<b>-o</b> Old mode: don't send HELO, and don't send message
|
||||||
|
headers.
|
||||||
|
|
||||||
<b>-r</b> <i>recipient</i><b>_</b><i>count</i>
|
<b>-r</b> <i>recipient</i><b>_</b><i>count</i>
|
||||||
Send the specified number of recipients per trans-
|
Send the specified number of recipients per trans-
|
||||||
action (default: 1). Recipient names are generated
|
action (default: 1). Recipient names are generated
|
||||||
@@ -88,6 +93,9 @@ SMTP-SOURCE(1) SMTP-SOURCE(1)
|
|||||||
between messages. Suspending one thread does not
|
between messages. Suspending one thread does not
|
||||||
affect other delivery threads.
|
affect other delivery threads.
|
||||||
|
|
||||||
|
<b>-v</b> Make the program more verbose, for debugging pur-
|
||||||
|
poses.
|
||||||
|
|
||||||
<b>-w</b> <i>interval</i>
|
<b>-w</b> <i>interval</i>
|
||||||
Wait a fixed time between messages. Suspending one
|
Wait a fixed time between messages. Suspending one
|
||||||
thread does not affect other delivery threads.
|
thread does not affect other delivery threads.
|
||||||
|
@@ -43,6 +43,10 @@ Send \fIlength\fR bytes as message payload. The length
|
|||||||
includes the message headers.
|
includes the message headers.
|
||||||
.IP "\fB-m \fImessage_count\fR"
|
.IP "\fB-m \fImessage_count\fR"
|
||||||
Send the specified number of messages (default: 1).
|
Send the specified number of messages (default: 1).
|
||||||
|
.IP "\fB-M \fImyhostname\fR"
|
||||||
|
Use the specified hostname or [address] in the default
|
||||||
|
sender and recipient addresses, instead of the machine
|
||||||
|
hostname.
|
||||||
.IP "\fB-r \fIrecipient_count\fR"
|
.IP "\fB-r \fIrecipient_count\fR"
|
||||||
Send the specified number of recipients per transaction (default: 1).
|
Send the specified number of recipients per transaction (default: 1).
|
||||||
Recipient names are generated by prepending a number to the
|
Recipient names are generated by prepending a number to the
|
||||||
@@ -54,6 +58,8 @@ Use the specified recipient address (default: <foo@myhostname>).
|
|||||||
.IP "\fB-R \fIinterval\fR"
|
.IP "\fB-R \fIinterval\fR"
|
||||||
Wait for a random period of time 0 <= n <= interval between messages.
|
Wait for a random period of time 0 <= n <= interval between messages.
|
||||||
Suspending one thread does not affect other delivery threads.
|
Suspending one thread does not affect other delivery threads.
|
||||||
|
.IP \fB-v\fR
|
||||||
|
Make the program more verbose, for debugging purposes.
|
||||||
.IP "\fB-w \fIinterval\fR"
|
.IP "\fB-w \fIinterval\fR"
|
||||||
Wait a fixed time between messages.
|
Wait a fixed time between messages.
|
||||||
Suspending one thread does not affect other delivery threads.
|
Suspending one thread does not affect other delivery threads.
|
||||||
|
@@ -43,8 +43,6 @@ Don't disconnect after sending a message; send the next
|
|||||||
message over the same connection.
|
message over the same connection.
|
||||||
.IP "\fB-f \fIfrom\fR"
|
.IP "\fB-f \fIfrom\fR"
|
||||||
Use the specified sender address (default: <foo@myhostname>).
|
Use the specified sender address (default: <foo@myhostname>).
|
||||||
.IP \fB-o\fR
|
|
||||||
Old mode: don't send HELO, and don't send message headers.
|
|
||||||
.IP "\fB-l \fIlength\fR"
|
.IP "\fB-l \fIlength\fR"
|
||||||
Send \fIlength\fR bytes as message payload. The length does not
|
Send \fIlength\fR bytes as message payload. The length does not
|
||||||
include message headers.
|
include message headers.
|
||||||
@@ -52,12 +50,18 @@ include message headers.
|
|||||||
Speak LMTP rather than SMTP.
|
Speak LMTP rather than SMTP.
|
||||||
.IP "\fB-m \fImessage_count\fR"
|
.IP "\fB-m \fImessage_count\fR"
|
||||||
Send the specified number of messages (default: 1).
|
Send the specified number of messages (default: 1).
|
||||||
|
.IP "\fB-M \fImyhostname\fR"
|
||||||
|
Use the specified hostname or [address] in the HELO command
|
||||||
|
and in the default sender and recipient addresses, instead
|
||||||
|
of the machine hostname.
|
||||||
.IP "\fB-N\fR"
|
.IP "\fB-N\fR"
|
||||||
Prepend a non-repeating sequence number to each recipient
|
Prepend a non-repeating sequence number to each recipient
|
||||||
address. This avoids the artificial 100% hit rate in the
|
address. This avoids the artificial 100% hit rate in the
|
||||||
resolve and rewrite client caches and exercises the
|
resolve and rewrite client caches and exercises the
|
||||||
trivial-rewrite daemon, better approximating Postfix
|
trivial-rewrite daemon, better approximating Postfix
|
||||||
performance under real-life work-loads.
|
performance under real-life work-loads.
|
||||||
|
.IP \fB-o\fR
|
||||||
|
Old mode: don't send HELO, and don't send message headers.
|
||||||
.IP "\fB-r \fIrecipient_count\fR"
|
.IP "\fB-r \fIrecipient_count\fR"
|
||||||
Send the specified number of recipients per transaction (default: 1).
|
Send the specified number of recipients per transaction (default: 1).
|
||||||
Recipient names are generated by prepending a number to the
|
Recipient names are generated by prepending a number to the
|
||||||
@@ -71,6 +75,8 @@ Use the specified recipient address (default: <foo@myhostname>).
|
|||||||
.IP "\fB-R \fIinterval\fR"
|
.IP "\fB-R \fIinterval\fR"
|
||||||
Wait for a random period of time 0 <= n <= interval between messages.
|
Wait for a random period of time 0 <= n <= interval between messages.
|
||||||
Suspending one thread does not affect other delivery threads.
|
Suspending one thread does not affect other delivery threads.
|
||||||
|
.IP \fB-v\fR
|
||||||
|
Make the program more verbose, for debugging purposes.
|
||||||
.IP "\fB-w \fIinterval\fR"
|
.IP "\fB-w \fIinterval\fR"
|
||||||
Wait a fixed time between messages.
|
Wait a fixed time between messages.
|
||||||
Suspending one thread does not affect other delivery threads.
|
Suspending one thread does not affect other delivery threads.
|
||||||
|
@@ -52,8 +52,9 @@ such as whitespace, `#', `:', or `@'. The \fIname\fR is folded to
|
|||||||
lowercase, in order to make database lookups case insensitive.
|
lowercase, in order to make database lookups case insensitive.
|
||||||
.PP
|
.PP
|
||||||
In addition, when an alias exists for \fBowner-\fIname\fR, delivery
|
In addition, when an alias exists for \fBowner-\fIname\fR, delivery
|
||||||
diagnostics are directed to that address, instead of to the originator.
|
diagnostics are directed to that address, instead of to the originator
|
||||||
This is typically used to direct delivery errors to the owner of
|
of the message.
|
||||||
|
This is typically used to direct delivery errors to the maintainer of
|
||||||
a mailing list, who is in a better position to deal with mailing
|
a mailing list, who is in a better position to deal with mailing
|
||||||
list delivery problems than the originator of the undelivered mail.
|
list delivery problems than the originator of the undelivered mail.
|
||||||
.PP
|
.PP
|
||||||
@@ -145,6 +146,18 @@ Give special treatment to \fBowner-\fIlistname\fR and
|
|||||||
addresses.
|
addresses.
|
||||||
.IP \fBrecipient_delimiter\fR
|
.IP \fBrecipient_delimiter\fR
|
||||||
Delimiter that separates recipients from address extensions.
|
Delimiter that separates recipients from address extensions.
|
||||||
|
.PP
|
||||||
|
Available in Postfix version 2.3 and later:
|
||||||
|
.IP \fBfrozen_delivered_to\fR
|
||||||
|
Update the local(8) delivery agent's Delivered-To: address
|
||||||
|
(see prepend_delivered_header) only once, at the start of
|
||||||
|
a delivery; do not update the Delivered-To: address while
|
||||||
|
expanding aliases or .forward files.
|
||||||
|
.IP \fBsticky_owner_alias\fR
|
||||||
|
When expanding a local(8) alias that has an owner alias
|
||||||
|
(see owner-\fIname\fR discussion above), use the owner
|
||||||
|
information even when the expansion invokes a subordinate
|
||||||
|
alias that has no owner alias.
|
||||||
.SH "STANDARDS"
|
.SH "STANDARDS"
|
||||||
.na
|
.na
|
||||||
.nf
|
.nf
|
||||||
|
@@ -1309,6 +1309,18 @@ forward_path =
|
|||||||
.fi
|
.fi
|
||||||
.ad
|
.ad
|
||||||
.ft R
|
.ft R
|
||||||
|
.SH frozen_delivered_to (default: yes)
|
||||||
|
Update the \fBlocal\fR(8) delivery agent's idea of the Delivered-To:
|
||||||
|
address (see prepend_delivered_header) only once, at the start of
|
||||||
|
a delivery attempt; do not update the Delivered-To: address while
|
||||||
|
expanding aliases or .forward files.
|
||||||
|
.PP
|
||||||
|
This feature is available in Postfix 2.3 and later. With older
|
||||||
|
Postfix releases, the behavior is as if this parameter is set to
|
||||||
|
"no". The old setting can be expensive with deeply nested aliases
|
||||||
|
or .forward files. When an alias or .forward file changes the
|
||||||
|
Delivered-To: address, it ties up one queue file and one cleanup
|
||||||
|
process instance while mail is being forwarded.
|
||||||
.SH hash_queue_depth (default: 1)
|
.SH hash_queue_depth (default: 1)
|
||||||
The number of subdirectory levels for queue directories listed with
|
The number of subdirectory levels for queue directories listed with
|
||||||
the hash_queue_names parameter.
|
the hash_queue_names parameter.
|
||||||
@@ -2546,7 +2558,9 @@ submissions from the Postfix maildrop queue.
|
|||||||
This feature is available in Postfix 2.0 and later.
|
This feature is available in Postfix 2.0 and later.
|
||||||
.SH prepend_delivered_header (default: command, file, forward)
|
.SH prepend_delivered_header (default: command, file, forward)
|
||||||
The message delivery contexts where the Postfix \fBlocal\fR(8) delivery
|
The message delivery contexts where the Postfix \fBlocal\fR(8) delivery
|
||||||
agent prepends a Delivered-To: message header.
|
agent prepends a Delivered-To: message header with the address
|
||||||
|
that the mail was delivered to. This information is used for mail
|
||||||
|
delivery loop detection.
|
||||||
.PP
|
.PP
|
||||||
By default, the Postfix local delivery agent prepends a Delivered-To:
|
By default, the Postfix local delivery agent prepends a Delivered-To:
|
||||||
header when forwarding mail and when delivering to file (mailbox)
|
header when forwarding mail and when delivering to file (mailbox)
|
||||||
@@ -5335,6 +5349,16 @@ This is used for delivery to file or mailbox.
|
|||||||
.PP
|
.PP
|
||||||
Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks).
|
Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks).
|
||||||
The default time unit is s (seconds).
|
The default time unit is s (seconds).
|
||||||
|
.SH sticky_owner_alias (default: yes)
|
||||||
|
When expanding a \fBlocal\fR(8) alias that has an owner alias (see
|
||||||
|
owner-\fIname\fR discussion in \fBaliases\fR(5)), use the owner information
|
||||||
|
even when the expansion invokes a subordinate alias that has no
|
||||||
|
owner alias.
|
||||||
|
.PP
|
||||||
|
This feature is available in Postfix 2.3 and later. With older
|
||||||
|
Postfix releases, the behavior is as if this parameter is set to
|
||||||
|
"no". The old setting provides poorer error reporting with nested
|
||||||
|
aliases that only have an owner alias at the top level.
|
||||||
.SH strict_7bit_headers (default: no)
|
.SH strict_7bit_headers (default: no)
|
||||||
Reject mail with 8-bit text in message headers. This blocks mail
|
Reject mail with 8-bit text in message headers. This blocks mail
|
||||||
from poorly written applications.
|
from poorly written applications.
|
||||||
|
@@ -392,6 +392,18 @@ address localparts: don't split such addresses when the
|
|||||||
recipient_delimiter is set to "-".
|
recipient_delimiter is set to "-".
|
||||||
.IP "\fBsun_mailtool_compatibility (no)\fR"
|
.IP "\fBsun_mailtool_compatibility (no)\fR"
|
||||||
Obsolete SUN mailtool compatibility feature.
|
Obsolete SUN mailtool compatibility feature.
|
||||||
|
.PP
|
||||||
|
Available in Postfix version 2.3 and later:
|
||||||
|
.IP "\fBfrozen_delivered_to (yes)\fR"
|
||||||
|
Update the \fBlocal\fR(8) delivery agent's idea of the Delivered-To:
|
||||||
|
address (see prepend_delivered_header) only once, at the start of
|
||||||
|
a delivery attempt; do not update the Delivered-To: address while
|
||||||
|
expanding aliases or .forward files.
|
||||||
|
.IP "\fBsticky_owner_alias (yes)\fR"
|
||||||
|
When expanding a \fBlocal\fR(8) alias that has an owner alias (see
|
||||||
|
owner-\fIname\fR discussion in \fBaliases\fR(5)), use the owner information
|
||||||
|
even when the expansion invokes a subordinate alias that has no
|
||||||
|
owner alias.
|
||||||
.SH "DELIVERY METHOD CONTROLS"
|
.SH "DELIVERY METHOD CONTROLS"
|
||||||
.na
|
.na
|
||||||
.nf
|
.nf
|
||||||
@@ -520,7 +532,8 @@ The maximal number of connection requests before a Postfix daemon
|
|||||||
process terminates.
|
process terminates.
|
||||||
.IP "\fBprepend_delivered_header (command, file, forward)\fR"
|
.IP "\fBprepend_delivered_header (command, file, forward)\fR"
|
||||||
The message delivery contexts where the Postfix \fBlocal\fR(8) delivery
|
The message delivery contexts where the Postfix \fBlocal\fR(8) delivery
|
||||||
agent prepends a Delivered-To: message header.
|
agent prepends a Delivered-To: message header with the address
|
||||||
|
that the mail was delivered to.
|
||||||
.IP "\fBprocess_id (read-only)\fR"
|
.IP "\fBprocess_id (read-only)\fR"
|
||||||
The process ID of a Postfix command or daemon process.
|
The process ID of a Postfix command or daemon process.
|
||||||
.IP "\fBprocess_name (read-only)\fR"
|
.IP "\fBprocess_name (read-only)\fR"
|
||||||
|
@@ -501,6 +501,9 @@ while (<>) {
|
|||||||
s;\btls_ran[-</Bb>]*\n* *[<Bb>]*dom_reseed_period\b;<a href="postconf.5.html#tls_random_reseed_period">$&</a>;g;
|
s;\btls_ran[-</Bb>]*\n* *[<Bb>]*dom_reseed_period\b;<a href="postconf.5.html#tls_random_reseed_period">$&</a>;g;
|
||||||
s;\btls_ran[-</Bb>]*\n* *[<Bb>]*dom_source\b;<a href="postconf.5.html#tls_random_source">$&</a>;g;
|
s;\btls_ran[-</Bb>]*\n* *[<Bb>]*dom_source\b;<a href="postconf.5.html#tls_random_source">$&</a>;g;
|
||||||
|
|
||||||
|
s;\bfrozen_delivered_to\b;<a href="postconf.5.html#frozen_delivered_to">$&</a>;g;
|
||||||
|
s;\bsticky_owner_alias\b;<a href="postconf.5.html#sticky_owner_alias">$&</a>;g;
|
||||||
|
|
||||||
# Undo hyperlinks of manual pages with the same name as parameters.
|
# Undo hyperlinks of manual pages with the same name as parameters.
|
||||||
|
|
||||||
s/<a href="[^"]*">([^<]*)<\/a>\(/$1(/g;
|
s/<a href="[^"]*">([^<]*)<\/a>\(/$1(/g;
|
||||||
|
@@ -46,8 +46,9 @@
|
|||||||
# lowercase, in order to make database lookups case insensitive.
|
# lowercase, in order to make database lookups case insensitive.
|
||||||
# .PP
|
# .PP
|
||||||
# In addition, when an alias exists for \fBowner-\fIname\fR, delivery
|
# In addition, when an alias exists for \fBowner-\fIname\fR, delivery
|
||||||
# diagnostics are directed to that address, instead of to the originator.
|
# diagnostics are directed to that address, instead of to the originator
|
||||||
# This is typically used to direct delivery errors to the owner of
|
# of the message.
|
||||||
|
# This is typically used to direct delivery errors to the maintainer of
|
||||||
# a mailing list, who is in a better position to deal with mailing
|
# a mailing list, who is in a better position to deal with mailing
|
||||||
# list delivery problems than the originator of the undelivered mail.
|
# list delivery problems than the originator of the undelivered mail.
|
||||||
# .PP
|
# .PP
|
||||||
@@ -133,6 +134,18 @@
|
|||||||
# addresses.
|
# addresses.
|
||||||
# .IP \fBrecipient_delimiter\fR
|
# .IP \fBrecipient_delimiter\fR
|
||||||
# Delimiter that separates recipients from address extensions.
|
# Delimiter that separates recipients from address extensions.
|
||||||
|
# .PP
|
||||||
|
# Available in Postfix version 2.3 and later:
|
||||||
|
# .IP \fBfrozen_delivered_to\fR
|
||||||
|
# Update the local(8) delivery agent's Delivered-To: address
|
||||||
|
# (see prepend_delivered_header) only once, at the start of
|
||||||
|
# a delivery; do not update the Delivered-To: address while
|
||||||
|
# expanding aliases or .forward files.
|
||||||
|
# .IP \fBsticky_owner_alias\fR
|
||||||
|
# When expanding a local(8) alias that has an owner alias
|
||||||
|
# (see owner-\fIname\fR discussion above), use the owner
|
||||||
|
# information even when the expansion invokes a subordinate
|
||||||
|
# alias that has no owner alias.
|
||||||
# STANDARDS
|
# STANDARDS
|
||||||
# RFC 822 (ARPA Internet Text Messages)
|
# RFC 822 (ARPA Internet Text Messages)
|
||||||
# SEE ALSO
|
# SEE ALSO
|
||||||
|
@@ -6841,10 +6841,10 @@ This feature is available in Postfix 2.0 and later.
|
|||||||
|
|
||||||
%PARAM prepend_delivered_header command, file, forward
|
%PARAM prepend_delivered_header command, file, forward
|
||||||
|
|
||||||
<p>
|
<p> The message delivery contexts where the Postfix local(8) delivery
|
||||||
The message delivery contexts where the Postfix local(8) delivery
|
agent prepends a Delivered-To: message header with the address
|
||||||
agent prepends a Delivered-To: message header.
|
that the mail was delivered to. This information is used for mail
|
||||||
</p>
|
delivery loop detection. </p>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
By default, the Postfix local delivery agent prepends a Delivered-To:
|
By default, the Postfix local delivery agent prepends a Delivered-To:
|
||||||
@@ -8541,3 +8541,29 @@ message_strip_characters = \0
|
|||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
<p> This feature is available in Postfix 2.3 and later. </p>
|
<p> This feature is available in Postfix 2.3 and later. </p>
|
||||||
|
|
||||||
|
%PARAM sticky_owner_alias yes
|
||||||
|
|
||||||
|
<p> When expanding a local(8) alias that has an owner alias (see
|
||||||
|
owner-<i>name</i> discussion in aliases(5)), use the owner information
|
||||||
|
even when the expansion invokes a subordinate alias that has no
|
||||||
|
owner alias. </p>
|
||||||
|
|
||||||
|
<p> This feature is available in Postfix 2.3 and later. With older
|
||||||
|
Postfix releases, the behavior is as if this parameter is set to
|
||||||
|
"no". The old setting provides poorer error reporting with nested
|
||||||
|
aliases that only have an owner alias at the top level. </p>
|
||||||
|
|
||||||
|
%PARAM frozen_delivered_to yes
|
||||||
|
|
||||||
|
<p> Update the local(8) delivery agent's idea of the Delivered-To:
|
||||||
|
address (see prepend_delivered_header) only once, at the start of
|
||||||
|
a delivery attempt; do not update the Delivered-To: address while
|
||||||
|
expanding aliases or .forward files. </p>
|
||||||
|
|
||||||
|
<p> This feature is available in Postfix 2.3 and later. With older
|
||||||
|
Postfix releases, the behavior is as if this parameter is set to
|
||||||
|
"no". The old setting can be expensive with deeply nested aliases
|
||||||
|
or .forward files. When an alias or .forward file changes the
|
||||||
|
Delivered-To: address, it ties up one queue file and one cleanup
|
||||||
|
process instance while mail is being forwarded. </p>
|
||||||
|
@@ -2373,6 +2373,17 @@ extern char *var_msg_reject_chars;
|
|||||||
#define DEF_MSG_STRIP_CHARS ""
|
#define DEF_MSG_STRIP_CHARS ""
|
||||||
extern char *var_msg_strip_chars;
|
extern char *var_msg_strip_chars;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Local forwarding complexity controls.
|
||||||
|
*/
|
||||||
|
#define VAR_FROZEN_DELIVERED "frozen_delivered_to"
|
||||||
|
#define DEF_FROZEN_DELIVERED 1
|
||||||
|
extern bool var_frozen_delivered;
|
||||||
|
|
||||||
|
#define VAR_STICKY_OWNER_ALIAS "sticky_owner_alias"
|
||||||
|
#define DEF_STICKY_OWNER_ALIAS 1
|
||||||
|
extern bool var_sticky_owner_alias;
|
||||||
|
|
||||||
/* LICENSE
|
/* LICENSE
|
||||||
/* .ad
|
/* .ad
|
||||||
/* .fi
|
/* .fi
|
||||||
|
@@ -20,7 +20,7 @@
|
|||||||
* Patches change both the patchlevel and the release date. Snapshots have no
|
* Patches change both the patchlevel and the release date. Snapshots have no
|
||||||
* patchlevel; they change the release date only.
|
* patchlevel; they change the release date only.
|
||||||
*/
|
*/
|
||||||
#define MAIL_RELEASE_DATE "20050922"
|
#define MAIL_RELEASE_DATE "20050923"
|
||||||
#define MAIL_VERSION_NUMBER "2.3"
|
#define MAIL_VERSION_NUMBER "2.3"
|
||||||
|
|
||||||
#ifdef SNAPSHOT
|
#ifdef SNAPSHOT
|
||||||
|
@@ -145,8 +145,6 @@ static NAME_MASK lmtp_sasl_sec_mask[] = {
|
|||||||
|
|
||||||
#if SASL_VERSION_MAJOR < 2
|
#if SASL_VERSION_MAJOR < 2
|
||||||
/* SASL version 1.x */
|
/* SASL version 1.x */
|
||||||
#define SASL_LOG_WARN SASL_LOG_WARNING
|
|
||||||
#define SASL_LOG_NOTE SASL_LOG_INFO
|
|
||||||
#define SASL_CLIENT_NEW(srv, fqdn, lport, rport, prompt, secflags, pconn) \
|
#define SASL_CLIENT_NEW(srv, fqdn, lport, rport, prompt, secflags, pconn) \
|
||||||
sasl_client_new(srv, fqdn, prompt, secflags, pconn)
|
sasl_client_new(srv, fqdn, prompt, secflags, pconn)
|
||||||
#define SASL_CLIENT_START(conn, mechlst, secret, prompt, clout, cllen, mech) \
|
#define SASL_CLIENT_START(conn, mechlst, secret, prompt, clout, cllen, mech) \
|
||||||
@@ -177,16 +175,53 @@ static int lmtp_sasl_log(void *unused_context, int priority,
|
|||||||
{
|
{
|
||||||
switch (priority) {
|
switch (priority) {
|
||||||
case SASL_LOG_ERR: /* unusual errors */
|
case SASL_LOG_ERR: /* unusual errors */
|
||||||
case SASL_LOG_WARN: /* non-fatal warnings */
|
#ifdef SASL_LOG_WARN /* non-fatal warnings (Cyrus-SASL v2) */
|
||||||
|
case SASL_LOG_WARN:
|
||||||
|
#endif
|
||||||
|
#ifdef SASL_LOG_WARNING /* non-fatal warnings (Cyrus-SASL v1) */
|
||||||
|
case SASL_LOG_WARNING:
|
||||||
|
#endif
|
||||||
msg_warn("SASL authentication problem: %s", message);
|
msg_warn("SASL authentication problem: %s", message);
|
||||||
break;
|
break;
|
||||||
case SASL_LOG_NOTE: /* other info */
|
#ifdef SASL_LOG_INFO
|
||||||
|
case SASL_LOG_INFO: /* other info (Cyrus-SASL v1) */
|
||||||
if (msg_verbose)
|
if (msg_verbose)
|
||||||
msg_info("SASL authentication info: %s", message);
|
msg_info("SASL authentication info: %s", message);
|
||||||
break;
|
break;
|
||||||
#if SASL_VERSION_MAJOR >= 2
|
#endif
|
||||||
case SASL_LOG_FAIL: /* authentication failures */
|
#ifdef SASL_LOG_NOTE
|
||||||
|
case SASL_LOG_NOTE: /* other info (Cyrus-SASL v2) */
|
||||||
|
if (msg_verbose)
|
||||||
|
msg_info("SASL authentication info: %s", message);
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
#ifdef SASL_LOG_FAIL
|
||||||
|
case SASL_LOG_FAIL: /* authentication failures
|
||||||
|
* (Cyrus-SASL v2) */
|
||||||
msg_warn("SASL authentication failure: %s", message);
|
msg_warn("SASL authentication failure: %s", message);
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
#ifdef SASL_LOG_DEBUG
|
||||||
|
case SASL_LOG_DEBUG: /* more verbose than LOG_NOTE
|
||||||
|
* (Cyrus-SASL v2) */
|
||||||
|
if (msg_verbose > 1)
|
||||||
|
msg_info("SASL authentication debug: %s", message);
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
#ifdef SASL_LOG_TRACE
|
||||||
|
case SASL_LOG_TRACE: /* traces of internal
|
||||||
|
* protocols (Cyrus-SASL v2) */
|
||||||
|
if (msg_verbose > 1)
|
||||||
|
msg_info("SASL authentication trace: %s", message);
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
#ifdef SASL_LOG_PASS
|
||||||
|
case SASL_LOG_PASS: /* traces of internal
|
||||||
|
* protocols, including
|
||||||
|
* passwords (Cyrus-SASL v2) */
|
||||||
|
if (msg_verbose > 1)
|
||||||
|
msg_info("SASL authentication pass: %s", message);
|
||||||
|
break;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
return (SASL_OK);
|
return (SASL_OK);
|
||||||
|
@@ -263,6 +263,7 @@ int deliver_alias(LOCAL_STATE state, USER_ATTR usr_attr,
|
|||||||
SET_OWNER_ATTR(state.msg_attr, STR(canon_owner), state.level);
|
SET_OWNER_ATTR(state.msg_attr, STR(canon_owner), state.level);
|
||||||
} else {
|
} else {
|
||||||
canon_owner = 0;
|
canon_owner = 0;
|
||||||
|
if (var_sticky_owner_alias == 0)
|
||||||
RESET_OWNER_ATTR(state.msg_attr, state.level);
|
RESET_OWNER_ATTR(state.msg_attr, state.level);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -272,6 +273,7 @@ int deliver_alias(LOCAL_STATE state, USER_ATTR usr_attr,
|
|||||||
* Set the delivered message attribute to the recipient, so that
|
* Set the delivered message attribute to the recipient, so that
|
||||||
* this message will list the correct forwarding address.
|
* this message will list the correct forwarding address.
|
||||||
*/
|
*/
|
||||||
|
if (var_frozen_delivered == 0)
|
||||||
state.msg_attr.delivered = state.msg_attr.rcpt.address;
|
state.msg_attr.delivered = state.msg_attr.rcpt.address;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@@ -139,6 +139,7 @@ int deliver_dotforward(LOCAL_STATE state, USER_ATTR usr_attr, int *statusp)
|
|||||||
* Set the delivered message attribute to the recipient, so that this
|
* Set the delivered message attribute to the recipient, so that this
|
||||||
* message will list the correct forwarding address.
|
* message will list the correct forwarding address.
|
||||||
*/
|
*/
|
||||||
|
if (var_frozen_delivered == 0)
|
||||||
state.msg_attr.delivered = state.msg_attr.rcpt.address;
|
state.msg_attr.delivered = state.msg_attr.rcpt.address;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@@ -360,6 +360,18 @@
|
|||||||
/* recipient_delimiter is set to "-".
|
/* recipient_delimiter is set to "-".
|
||||||
/* .IP "\fBsun_mailtool_compatibility (no)\fR"
|
/* .IP "\fBsun_mailtool_compatibility (no)\fR"
|
||||||
/* Obsolete SUN mailtool compatibility feature.
|
/* Obsolete SUN mailtool compatibility feature.
|
||||||
|
/* .PP
|
||||||
|
/* Available in Postfix version 2.3 and later:
|
||||||
|
/* .IP "\fBfrozen_delivered_to (yes)\fR"
|
||||||
|
/* Update the \fBlocal\fR(8) delivery agent's idea of the Delivered-To:
|
||||||
|
/* address (see prepend_delivered_header) only once, at the start of
|
||||||
|
/* a delivery attempt; do not update the Delivered-To: address while
|
||||||
|
/* expanding aliases or .forward files.
|
||||||
|
/* .IP "\fBsticky_owner_alias (yes)\fR"
|
||||||
|
/* When expanding a \fBlocal\fR(8) alias that has an owner alias (see
|
||||||
|
/* owner-\fIname\fR discussion in \fBaliases\fR(5)), use the owner information
|
||||||
|
/* even when the expansion invokes a subordinate alias that has no
|
||||||
|
/* owner alias.
|
||||||
/* DELIVERY METHOD CONTROLS
|
/* DELIVERY METHOD CONTROLS
|
||||||
/* .ad
|
/* .ad
|
||||||
/* .fi
|
/* .fi
|
||||||
@@ -478,7 +490,8 @@
|
|||||||
/* process terminates.
|
/* process terminates.
|
||||||
/* .IP "\fBprepend_delivered_header (command, file, forward)\fR"
|
/* .IP "\fBprepend_delivered_header (command, file, forward)\fR"
|
||||||
/* The message delivery contexts where the Postfix \fBlocal\fR(8) delivery
|
/* The message delivery contexts where the Postfix \fBlocal\fR(8) delivery
|
||||||
/* agent prepends a Delivered-To: message header.
|
/* agent prepends a Delivered-To: message header with the address
|
||||||
|
/* that the mail was delivered to.
|
||||||
/* .IP "\fBprocess_id (read-only)\fR"
|
/* .IP "\fBprocess_id (read-only)\fR"
|
||||||
/* The process ID of a Postfix command or daemon process.
|
/* The process ID of a Postfix command or daemon process.
|
||||||
/* .IP "\fBprocess_name (read-only)\fR"
|
/* .IP "\fBprocess_name (read-only)\fR"
|
||||||
@@ -606,6 +619,8 @@ int var_stat_home_dir;
|
|||||||
int var_mailtool_compat;
|
int var_mailtool_compat;
|
||||||
char *var_mailbox_lock;
|
char *var_mailbox_lock;
|
||||||
int var_mailbox_limit;
|
int var_mailbox_limit;
|
||||||
|
bool var_frozen_delivered;
|
||||||
|
bool var_sticky_owner_alias;
|
||||||
|
|
||||||
int local_cmd_deliver_mask;
|
int local_cmd_deliver_mask;
|
||||||
int local_file_deliver_mask;
|
int local_file_deliver_mask;
|
||||||
@@ -845,6 +860,8 @@ int main(int argc, char **argv)
|
|||||||
VAR_EXP_OWN_ALIAS, DEF_EXP_OWN_ALIAS, &var_exp_own_alias,
|
VAR_EXP_OWN_ALIAS, DEF_EXP_OWN_ALIAS, &var_exp_own_alias,
|
||||||
VAR_STAT_HOME_DIR, DEF_STAT_HOME_DIR, &var_stat_home_dir,
|
VAR_STAT_HOME_DIR, DEF_STAT_HOME_DIR, &var_stat_home_dir,
|
||||||
VAR_MAILTOOL_COMPAT, DEF_MAILTOOL_COMPAT, &var_mailtool_compat,
|
VAR_MAILTOOL_COMPAT, DEF_MAILTOOL_COMPAT, &var_mailtool_compat,
|
||||||
|
VAR_FROZEN_DELIVERED, DEF_FROZEN_DELIVERED, &var_frozen_delivered,
|
||||||
|
VAR_STICKY_OWNER_ALIAS, DEF_STICKY_OWNER_ALIAS, &var_sticky_owner_alias,
|
||||||
0,
|
0,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -124,6 +124,7 @@ static int deliver_mailbox_file(LOCAL_STATE state, USER_ATTR usr_attr)
|
|||||||
*/
|
*/
|
||||||
if (vstream_fseek(state.msg_attr.fp, state.msg_attr.offset, SEEK_SET) < 0)
|
if (vstream_fseek(state.msg_attr.fp, state.msg_attr.offset, SEEK_SET) < 0)
|
||||||
msg_fatal("seek message file %s: %m", VSTREAM_PATH(state.msg_attr.fp));
|
msg_fatal("seek message file %s: %m", VSTREAM_PATH(state.msg_attr.fp));
|
||||||
|
if (var_frozen_delivered == 0)
|
||||||
state.msg_attr.delivered = state.msg_attr.rcpt.address;
|
state.msg_attr.delivered = state.msg_attr.rcpt.address;
|
||||||
mail_copy_status = MAIL_COPY_STAT_WRITE;
|
mail_copy_status = MAIL_COPY_STAT_WRITE;
|
||||||
if (*var_home_mailbox) {
|
if (*var_home_mailbox) {
|
||||||
|
@@ -114,6 +114,7 @@ int deliver_maildir(LOCAL_STATE state, USER_ATTR usr_attr, char *path)
|
|||||||
*/
|
*/
|
||||||
if (vstream_fseek(state.msg_attr.fp, state.msg_attr.offset, SEEK_SET) < 0)
|
if (vstream_fseek(state.msg_attr.fp, state.msg_attr.offset, SEEK_SET) < 0)
|
||||||
msg_fatal("seek message file %s: %m", VSTREAM_PATH(state.msg_attr.fp));
|
msg_fatal("seek message file %s: %m", VSTREAM_PATH(state.msg_attr.fp));
|
||||||
|
if (var_frozen_delivered == 0)
|
||||||
state.msg_attr.delivered = state.msg_attr.rcpt.address;
|
state.msg_attr.delivered = state.msg_attr.rcpt.address;
|
||||||
mail_copy_status = MAIL_COPY_STAT_WRITE;
|
mail_copy_status = MAIL_COPY_STAT_WRITE;
|
||||||
buf = vstring_alloc(100);
|
buf = vstring_alloc(100);
|
||||||
|
@@ -160,8 +160,6 @@ static NAME_MASK smtp_sasl_sec_mask[] = {
|
|||||||
|
|
||||||
#if SASL_VERSION_MAJOR < 2
|
#if SASL_VERSION_MAJOR < 2
|
||||||
/* SASL version 1.x */
|
/* SASL version 1.x */
|
||||||
#define SASL_LOG_WARN SASL_LOG_WARNING
|
|
||||||
#define SASL_LOG_NOTE SASL_LOG_INFO
|
|
||||||
#define SASL_CLIENT_NEW(srv, fqdn, lport, rport, prompt, secflags, pconn) \
|
#define SASL_CLIENT_NEW(srv, fqdn, lport, rport, prompt, secflags, pconn) \
|
||||||
sasl_client_new(srv, fqdn, prompt, secflags, pconn)
|
sasl_client_new(srv, fqdn, prompt, secflags, pconn)
|
||||||
#define SASL_CLIENT_START(conn, mechlst, secret, prompt, clout, cllen, mech) \
|
#define SASL_CLIENT_START(conn, mechlst, secret, prompt, clout, cllen, mech) \
|
||||||
@@ -197,32 +195,50 @@ static int smtp_sasl_log(void *unused_context, int priority,
|
|||||||
{
|
{
|
||||||
switch (priority) {
|
switch (priority) {
|
||||||
case SASL_LOG_ERR: /* unusual errors */
|
case SASL_LOG_ERR: /* unusual errors */
|
||||||
case SASL_LOG_WARN: /* non-fatal warnings */
|
#ifdef SASL_LOG_WARN /* non-fatal warnings (Cyrus-SASL v2) */
|
||||||
|
case SASL_LOG_WARN:
|
||||||
|
#endif
|
||||||
|
#ifdef SASL_LOG_WARNING /* non-fatal warnings (Cyrus-SASL v1) */
|
||||||
|
case SASL_LOG_WARNING:
|
||||||
|
#endif
|
||||||
msg_warn("SASL authentication problem: %s", message);
|
msg_warn("SASL authentication problem: %s", message);
|
||||||
break;
|
break;
|
||||||
case SASL_LOG_NOTE: /* other info */
|
#ifdef SASL_LOG_INFO
|
||||||
|
case SASL_LOG_INFO: /* other info (Cyrus-SASL v1) */
|
||||||
if (msg_verbose)
|
if (msg_verbose)
|
||||||
msg_info("SASL authentication info: %s", message);
|
msg_info("SASL authentication info: %s", message);
|
||||||
break;
|
break;
|
||||||
|
#endif
|
||||||
|
#ifdef SASL_LOG_NOTE
|
||||||
|
case SASL_LOG_NOTE: /* other info (Cyrus-SASL v2) */
|
||||||
|
if (msg_verbose)
|
||||||
|
msg_info("SASL authentication info: %s", message);
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
#ifdef SASL_LOG_FAIL
|
#ifdef SASL_LOG_FAIL
|
||||||
case SASL_LOG_FAIL: /* authentication failures */
|
case SASL_LOG_FAIL: /* authentication failures
|
||||||
|
* (Cyrus-SASL v2) */
|
||||||
msg_warn("SASL authentication failure: %s", message);
|
msg_warn("SASL authentication failure: %s", message);
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
#ifdef SASL_LOG_DEBUG
|
#ifdef SASL_LOG_DEBUG
|
||||||
case SASL_LOG_DEBUG:
|
case SASL_LOG_DEBUG: /* more verbose than LOG_NOTE
|
||||||
|
* (Cyrus-SASL v2) */
|
||||||
if (msg_verbose > 1)
|
if (msg_verbose > 1)
|
||||||
msg_info("SASL authentication debug: %s", message);
|
msg_info("SASL authentication debug: %s", message);
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
#ifdef SASL_LOG_TRACE
|
#ifdef SASL_LOG_TRACE
|
||||||
case SASL_LOG_TRACE:
|
case SASL_LOG_TRACE: /* traces of internal
|
||||||
|
* protocols (Cyrus-SASL v2) */
|
||||||
if (msg_verbose > 1)
|
if (msg_verbose > 1)
|
||||||
msg_info("SASL authentication trace: %s", message);
|
msg_info("SASL authentication trace: %s", message);
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
#ifdef SASL_LOG_PASS
|
#ifdef SASL_LOG_PASS
|
||||||
case SASL_LOG_PASS:
|
case SASL_LOG_PASS: /* traces of internal
|
||||||
|
* protocols, including
|
||||||
|
* passwords (Cyrus-SASL v2) */
|
||||||
if (msg_verbose > 1)
|
if (msg_verbose > 1)
|
||||||
msg_info("SASL authentication pass: %s", message);
|
msg_info("SASL authentication pass: %s", message);
|
||||||
break;
|
break;
|
||||||
|
@@ -135,8 +135,6 @@
|
|||||||
|
|
||||||
#if SASL_VERSION_MAJOR < 2
|
#if SASL_VERSION_MAJOR < 2
|
||||||
/* SASL version 1.x */
|
/* SASL version 1.x */
|
||||||
#define SASL_LOG_WARN SASL_LOG_WARNING
|
|
||||||
#define SASL_LOG_NOTE SASL_LOG_INFO
|
|
||||||
#define SASL_SERVER_NEW(srv, fqdn, rlm, lport, rport, cb, secflags, pconn) \
|
#define SASL_SERVER_NEW(srv, fqdn, rlm, lport, rport, cb, secflags, pconn) \
|
||||||
sasl_server_new(srv, fqdn, rlm, cb, secflags, pconn)
|
sasl_server_new(srv, fqdn, rlm, cb, secflags, pconn)
|
||||||
#define SASL_SERVER_START(conn, mech, clin, clinlen, srvout, srvoutlen, err) \
|
#define SASL_SERVER_START(conn, mech, clin, clinlen, srvout, srvoutlen, err) \
|
||||||
@@ -165,39 +163,57 @@ static int smtpd_sasl_log(void *unused_context, int priority,
|
|||||||
const char *message)
|
const char *message)
|
||||||
{
|
{
|
||||||
switch (priority) {
|
switch (priority) {
|
||||||
case SASL_LOG_ERR:
|
case SASL_LOG_ERR: /* unusual errors */
|
||||||
|
#ifdef SASL_LOG_WARN /* non-fatal warnings (Cyrus-SASL v2) */
|
||||||
case SASL_LOG_WARN:
|
case SASL_LOG_WARN:
|
||||||
|
#endif
|
||||||
|
#ifdef SASL_LOG_WARNING /* non-fatal warnings (Cyrus-SASL v1) */
|
||||||
|
case SASL_LOG_WARNING:
|
||||||
|
#endif
|
||||||
msg_warn("SASL authentication problem: %s", message);
|
msg_warn("SASL authentication problem: %s", message);
|
||||||
break;
|
break;
|
||||||
case SASL_LOG_NOTE:
|
#ifdef SASL_LOG_INFO
|
||||||
|
case SASL_LOG_INFO: /* other info (Cyrus-SASL v1) */
|
||||||
if (msg_verbose)
|
if (msg_verbose)
|
||||||
msg_info("SASL authentication info: %s", message);
|
msg_info("SASL authentication info: %s", message);
|
||||||
break;
|
break;
|
||||||
|
#endif
|
||||||
|
#ifdef SASL_LOG_NOTE
|
||||||
|
case SASL_LOG_NOTE: /* other info (Cyrus-SASL v2) */
|
||||||
|
if (msg_verbose)
|
||||||
|
msg_info("SASL authentication info: %s", message);
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
#ifdef SASL_LOG_FAIL
|
#ifdef SASL_LOG_FAIL
|
||||||
case SASL_LOG_FAIL:
|
case SASL_LOG_FAIL: /* authentication failures
|
||||||
|
* (Cyrus-SASL v2) */
|
||||||
msg_warn("SASL authentication failure: %s", message);
|
msg_warn("SASL authentication failure: %s", message);
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
#ifdef SASL_LOG_DEBUG
|
#ifdef SASL_LOG_DEBUG
|
||||||
case SASL_LOG_DEBUG:
|
case SASL_LOG_DEBUG: /* more verbose than LOG_NOTE
|
||||||
|
* (Cyrus-SASL v2) */
|
||||||
if (msg_verbose > 1)
|
if (msg_verbose > 1)
|
||||||
msg_info("SASL authentication debug: %s", message);
|
msg_info("SASL authentication debug: %s", message);
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
#ifdef SASL_LOG_TRACE
|
#ifdef SASL_LOG_TRACE
|
||||||
case SASL_LOG_TRACE:
|
case SASL_LOG_TRACE: /* traces of internal
|
||||||
|
* protocols (Cyrus-SASL v2) */
|
||||||
if (msg_verbose > 1)
|
if (msg_verbose > 1)
|
||||||
msg_info("SASL authentication trace: %s", message);
|
msg_info("SASL authentication trace: %s", message);
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
#ifdef SASL_LOG_PASS
|
#ifdef SASL_LOG_PASS
|
||||||
case SASL_LOG_PASS:
|
case SASL_LOG_PASS: /* traces of internal
|
||||||
|
* protocols, including
|
||||||
|
* passwords (Cyrus-SASL v2) */
|
||||||
if (msg_verbose > 1)
|
if (msg_verbose > 1)
|
||||||
msg_info("SASL authentication pass: %s", message);
|
msg_info("SASL authentication pass: %s", message);
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
return SASL_OK;
|
return (SASL_OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@@ -106,6 +106,8 @@ qmqp-source.o: ../../include/qmqp_proto.h
|
|||||||
qmqp-source.o: ../../include/sane_connect.h
|
qmqp-source.o: ../../include/sane_connect.h
|
||||||
qmqp-source.o: ../../include/split_at.h
|
qmqp-source.o: ../../include/split_at.h
|
||||||
qmqp-source.o: ../../include/sys_defs.h
|
qmqp-source.o: ../../include/sys_defs.h
|
||||||
|
qmqp-source.o: ../../include/valid_hostname.h
|
||||||
|
qmqp-source.o: ../../include/valid_mailhost_addr.h
|
||||||
qmqp-source.o: ../../include/vbuf.h
|
qmqp-source.o: ../../include/vbuf.h
|
||||||
qmqp-source.o: ../../include/vstream.h
|
qmqp-source.o: ../../include/vstream.h
|
||||||
qmqp-source.o: ../../include/vstring.h
|
qmqp-source.o: ../../include/vstring.h
|
||||||
@@ -142,6 +144,8 @@ smtp-source.o: ../../include/sane_connect.h
|
|||||||
smtp-source.o: ../../include/smtp_stream.h
|
smtp-source.o: ../../include/smtp_stream.h
|
||||||
smtp-source.o: ../../include/split_at.h
|
smtp-source.o: ../../include/split_at.h
|
||||||
smtp-source.o: ../../include/sys_defs.h
|
smtp-source.o: ../../include/sys_defs.h
|
||||||
|
smtp-source.o: ../../include/valid_hostname.h
|
||||||
|
smtp-source.o: ../../include/valid_mailhost_addr.h
|
||||||
smtp-source.o: ../../include/vbuf.h
|
smtp-source.o: ../../include/vbuf.h
|
||||||
smtp-source.o: ../../include/vstream.h
|
smtp-source.o: ../../include/vstream.h
|
||||||
smtp-source.o: ../../include/vstring.h
|
smtp-source.o: ../../include/vstring.h
|
||||||
|
@@ -37,6 +37,10 @@
|
|||||||
/* includes the message headers.
|
/* includes the message headers.
|
||||||
/* .IP "\fB-m \fImessage_count\fR"
|
/* .IP "\fB-m \fImessage_count\fR"
|
||||||
/* Send the specified number of messages (default: 1).
|
/* Send the specified number of messages (default: 1).
|
||||||
|
/* .IP "\fB-M \fImyhostname\fR"
|
||||||
|
/* Use the specified hostname or [address] in the default
|
||||||
|
/* sender and recipient addresses, instead of the machine
|
||||||
|
/* hostname.
|
||||||
/* .IP "\fB-r \fIrecipient_count\fR"
|
/* .IP "\fB-r \fIrecipient_count\fR"
|
||||||
/* Send the specified number of recipients per transaction (default: 1).
|
/* Send the specified number of recipients per transaction (default: 1).
|
||||||
/* Recipient names are generated by prepending a number to the
|
/* Recipient names are generated by prepending a number to the
|
||||||
@@ -48,6 +52,8 @@
|
|||||||
/* .IP "\fB-R \fIinterval\fR"
|
/* .IP "\fB-R \fIinterval\fR"
|
||||||
/* Wait for a random period of time 0 <= n <= interval between messages.
|
/* Wait for a random period of time 0 <= n <= interval between messages.
|
||||||
/* Suspending one thread does not affect other delivery threads.
|
/* Suspending one thread does not affect other delivery threads.
|
||||||
|
/* .IP \fB-v\fR
|
||||||
|
/* Make the program more verbose, for debugging purposes.
|
||||||
/* .IP "\fB-w \fIinterval\fR"
|
/* .IP "\fB-w \fIinterval\fR"
|
||||||
/* Wait a fixed time between messages.
|
/* Wait a fixed time between messages.
|
||||||
/* Suspending one thread does not affect other delivery threads.
|
/* Suspending one thread does not affect other delivery threads.
|
||||||
@@ -94,6 +100,8 @@
|
|||||||
#include <host_port.h>
|
#include <host_port.h>
|
||||||
#include <myaddrinfo.h>
|
#include <myaddrinfo.h>
|
||||||
#include <inet_proto.h>
|
#include <inet_proto.h>
|
||||||
|
#include <valid_hostname.h>
|
||||||
|
#include <valid_mailhost_addr.h>
|
||||||
|
|
||||||
/* Global library. */
|
/* Global library. */
|
||||||
|
|
||||||
@@ -428,7 +436,7 @@ static void receive_reply(int unused_event, char *context)
|
|||||||
|
|
||||||
static void usage(char *myname)
|
static void usage(char *myname)
|
||||||
{
|
{
|
||||||
msg_fatal("usage: %s -s sess -l msglen -m msgs -c -C count -f from -t to -R delay -v -w delay host[:port]", myname);
|
msg_fatal("usage: %s -cv -s sess -l msglen -m msgs -C count -M myhostname -f from -t to -R delay -w delay host[:port]", myname);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* main - parse JCL and start the machine */
|
/* main - parse JCL and start the machine */
|
||||||
@@ -458,7 +466,7 @@ int main(int argc, char **argv)
|
|||||||
/*
|
/*
|
||||||
* Parse JCL.
|
* Parse JCL.
|
||||||
*/
|
*/
|
||||||
while ((ch = GETOPT(argc, argv, "46cC:f:l:m:r:R:s:t:vw:")) > 0) {
|
while ((ch = GETOPT(argc, argv, "46cC:f:l:m:M:r:R:s:t:vw:")) > 0) {
|
||||||
switch (ch) {
|
switch (ch) {
|
||||||
case '4':
|
case '4':
|
||||||
protocols = INET_PROTO_NAME_IPV4;
|
protocols = INET_PROTO_NAME_IPV4;
|
||||||
@@ -484,6 +492,16 @@ int main(int argc, char **argv)
|
|||||||
if ((message_count = atoi(optarg)) <= 0)
|
if ((message_count = atoi(optarg)) <= 0)
|
||||||
usage(argv[0]);
|
usage(argv[0]);
|
||||||
break;
|
break;
|
||||||
|
case 'M':
|
||||||
|
if (*optarg == '[') {
|
||||||
|
if (!valid_mailhost_literal(optarg, DO_GRIPE))
|
||||||
|
msg_fatal("bad address literal: %s", optarg);
|
||||||
|
} else {
|
||||||
|
if (!valid_hostname(optarg, DO_GRIPE))
|
||||||
|
msg_fatal("bad hostname: %s", optarg);
|
||||||
|
}
|
||||||
|
var_myhostname = optarg;
|
||||||
|
break;
|
||||||
case 'r':
|
case 'r':
|
||||||
if ((recipients = atoi(optarg)) <= 0)
|
if ((recipients = atoi(optarg)) <= 0)
|
||||||
usage(argv[0]);
|
usage(argv[0]);
|
||||||
@@ -562,6 +580,7 @@ int main(int argc, char **argv)
|
|||||||
/*
|
/*
|
||||||
* Make sure we have sender and recipient addresses.
|
* Make sure we have sender and recipient addresses.
|
||||||
*/
|
*/
|
||||||
|
if (var_myhostname == 0)
|
||||||
var_myhostname = get_hostname();
|
var_myhostname = get_hostname();
|
||||||
if (sender == 0 || recipient == 0) {
|
if (sender == 0 || recipient == 0) {
|
||||||
vstring_sprintf(buffer, "foo@%s", var_myhostname);
|
vstring_sprintf(buffer, "foo@%s", var_myhostname);
|
||||||
|
@@ -37,8 +37,6 @@
|
|||||||
/* message over the same connection.
|
/* message over the same connection.
|
||||||
/* .IP "\fB-f \fIfrom\fR"
|
/* .IP "\fB-f \fIfrom\fR"
|
||||||
/* Use the specified sender address (default: <foo@myhostname>).
|
/* Use the specified sender address (default: <foo@myhostname>).
|
||||||
/* .IP \fB-o\fR
|
|
||||||
/* Old mode: don't send HELO, and don't send message headers.
|
|
||||||
/* .IP "\fB-l \fIlength\fR"
|
/* .IP "\fB-l \fIlength\fR"
|
||||||
/* Send \fIlength\fR bytes as message payload. The length does not
|
/* Send \fIlength\fR bytes as message payload. The length does not
|
||||||
/* include message headers.
|
/* include message headers.
|
||||||
@@ -46,12 +44,18 @@
|
|||||||
/* Speak LMTP rather than SMTP.
|
/* Speak LMTP rather than SMTP.
|
||||||
/* .IP "\fB-m \fImessage_count\fR"
|
/* .IP "\fB-m \fImessage_count\fR"
|
||||||
/* Send the specified number of messages (default: 1).
|
/* Send the specified number of messages (default: 1).
|
||||||
|
/* .IP "\fB-M \fImyhostname\fR"
|
||||||
|
/* Use the specified hostname or [address] in the HELO command
|
||||||
|
/* and in the default sender and recipient addresses, instead
|
||||||
|
/* of the machine hostname.
|
||||||
/* .IP "\fB-N\fR"
|
/* .IP "\fB-N\fR"
|
||||||
/* Prepend a non-repeating sequence number to each recipient
|
/* Prepend a non-repeating sequence number to each recipient
|
||||||
/* address. This avoids the artificial 100% hit rate in the
|
/* address. This avoids the artificial 100% hit rate in the
|
||||||
/* resolve and rewrite client caches and exercises the
|
/* resolve and rewrite client caches and exercises the
|
||||||
/* trivial-rewrite daemon, better approximating Postfix
|
/* trivial-rewrite daemon, better approximating Postfix
|
||||||
/* performance under real-life work-loads.
|
/* performance under real-life work-loads.
|
||||||
|
/* .IP \fB-o\fR
|
||||||
|
/* Old mode: don't send HELO, and don't send message headers.
|
||||||
/* .IP "\fB-r \fIrecipient_count\fR"
|
/* .IP "\fB-r \fIrecipient_count\fR"
|
||||||
/* Send the specified number of recipients per transaction (default: 1).
|
/* Send the specified number of recipients per transaction (default: 1).
|
||||||
/* Recipient names are generated by prepending a number to the
|
/* Recipient names are generated by prepending a number to the
|
||||||
@@ -65,6 +69,8 @@
|
|||||||
/* .IP "\fB-R \fIinterval\fR"
|
/* .IP "\fB-R \fIinterval\fR"
|
||||||
/* Wait for a random period of time 0 <= n <= interval between messages.
|
/* Wait for a random period of time 0 <= n <= interval between messages.
|
||||||
/* Suspending one thread does not affect other delivery threads.
|
/* Suspending one thread does not affect other delivery threads.
|
||||||
|
/* .IP \fB-v\fR
|
||||||
|
/* Make the program more verbose, for debugging purposes.
|
||||||
/* .IP "\fB-w \fIinterval\fR"
|
/* .IP "\fB-w \fIinterval\fR"
|
||||||
/* Wait a fixed time between messages.
|
/* Wait a fixed time between messages.
|
||||||
/* Suspending one thread does not affect other delivery threads.
|
/* Suspending one thread does not affect other delivery threads.
|
||||||
@@ -121,6 +127,8 @@
|
|||||||
#include <host_port.h>
|
#include <host_port.h>
|
||||||
#include <myaddrinfo.h>
|
#include <myaddrinfo.h>
|
||||||
#include <inet_proto.h>
|
#include <inet_proto.h>
|
||||||
|
#include <valid_hostname.h>
|
||||||
|
#include <valid_mailhost_addr.h>
|
||||||
|
|
||||||
/* Global library. */
|
/* Global library. */
|
||||||
|
|
||||||
@@ -784,7 +792,7 @@ static void quit_done(int unused_event, char *context)
|
|||||||
|
|
||||||
static void usage(char *myname)
|
static void usage(char *myname)
|
||||||
{
|
{
|
||||||
msg_fatal("usage: %s -cdLNov -s sess -l msglen -m msgs -C count -f from -t to -r rcptcount -R delay -w delay host[:port]", myname);
|
msg_fatal("usage: %s -cdLNov -s sess -l msglen -m msgs -C count -M myhostname -f from -t to -r rcptcount -R delay -w delay host[:port]", myname);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* main - parse JCL and start the machine */
|
/* main - parse JCL and start the machine */
|
||||||
@@ -812,7 +820,7 @@ int main(int argc, char **argv)
|
|||||||
/*
|
/*
|
||||||
* Parse JCL.
|
* Parse JCL.
|
||||||
*/
|
*/
|
||||||
while ((ch = GETOPT(argc, argv, "46cC:df:l:Lm:Nor:R:s:S:t:vw:")) > 0) {
|
while ((ch = GETOPT(argc, argv, "46cC:df:l:Lm:M:Nor:R:s:S:t:vw:")) > 0) {
|
||||||
switch (ch) {
|
switch (ch) {
|
||||||
case '4':
|
case '4':
|
||||||
protocols = INET_PROTO_NAME_IPV4;
|
protocols = INET_PROTO_NAME_IPV4;
|
||||||
@@ -851,6 +859,16 @@ int main(int argc, char **argv)
|
|||||||
if ((message_count = atoi(optarg)) <= 0)
|
if ((message_count = atoi(optarg)) <= 0)
|
||||||
msg_fatal("bad message count: %s", optarg);
|
msg_fatal("bad message count: %s", optarg);
|
||||||
break;
|
break;
|
||||||
|
case 'M':
|
||||||
|
if (*optarg == '[') {
|
||||||
|
if (!valid_mailhost_literal(optarg, DO_GRIPE))
|
||||||
|
msg_fatal("bad address literal: %s", optarg);
|
||||||
|
} else {
|
||||||
|
if (!valid_hostname(optarg, DO_GRIPE))
|
||||||
|
msg_fatal("bad hostname: %s", optarg);
|
||||||
|
}
|
||||||
|
var_myhostname = optarg;
|
||||||
|
break;
|
||||||
case 'N':
|
case 'N':
|
||||||
number_rcpts = 1;
|
number_rcpts = 1;
|
||||||
break;
|
break;
|
||||||
@@ -947,6 +965,7 @@ int main(int argc, char **argv)
|
|||||||
/*
|
/*
|
||||||
* Make sure we have sender and recipient addresses.
|
* Make sure we have sender and recipient addresses.
|
||||||
*/
|
*/
|
||||||
|
if (var_myhostname == 0)
|
||||||
var_myhostname = get_hostname();
|
var_myhostname = get_hostname();
|
||||||
if (sender == 0 || recipient == 0) {
|
if (sender == 0 || recipient == 0) {
|
||||||
vstring_sprintf(buffer, "foo@%s", var_myhostname);
|
vstring_sprintf(buffer, "foo@%s", var_myhostname);
|
||||||
|
Reference in New Issue
Block a user