mirror of
https://github.com/vdukhovni/postfix
synced 2025-09-01 06:35:27 +00:00
postfix-2.1.6
This commit is contained in:
committed by
Viktor Dukhovni
parent
cd532e0b31
commit
a2da6db108
@@ -9452,3 +9452,76 @@ Apologies for any names omitted.
|
|||||||
Bugfix (introduced 20020803): sent the wrong bounce message
|
Bugfix (introduced 20020803): sent the wrong bounce message
|
||||||
type when a Delivered-To: loop was detected for a mailing
|
type when a Delivered-To: loop was detected for a mailing
|
||||||
list alias. Nicolas Riendeau. File: bounce_notify_util.c.
|
list alias. Nicolas Riendeau. File: bounce_notify_util.c.
|
||||||
|
|
||||||
|
20041006
|
||||||
|
|
||||||
|
Bugfix: "sendmail -bv" did not reject the -t option. File:
|
||||||
|
sendmail/sendmail.c
|
||||||
|
|
||||||
|
20041228
|
||||||
|
|
||||||
|
Bugfix: SMTPD_PROXY_README incorrectly claimed that ":port"
|
||||||
|
in master.cf causes a server to listen only on "localhost"
|
||||||
|
without exposing the service to the network. Instead,
|
||||||
|
":port" causes a client to connect to "localhost".
|
||||||
|
|
||||||
|
|
||||||
|
20050131
|
||||||
|
|
||||||
|
Bugfix: when extracting recipients from message headers,
|
||||||
|
the Postfix sendmail command produced output records longer
|
||||||
|
than $line_length_limit, causing postdrop to reject the
|
||||||
|
mail. Diagnosis by Victor Duchovni. File: sendmail/sendmail.c.
|
||||||
|
|
||||||
|
20050208
|
||||||
|
|
||||||
|
Sanity check: don't allow unlimited message size with limited
|
||||||
|
mailbox size. File: local/local.c, virtual/virtual.c.
|
||||||
|
|
||||||
|
20050215
|
||||||
|
|
||||||
|
Bugfix: don't chmod queue files while running "postfix
|
||||||
|
set-permissions". This prevents mail from being labeled as
|
||||||
|
"corrupt" when a live Postfix system is upgraded. Found
|
||||||
|
by Victor Duchovni. File: conf/post-install.
|
||||||
|
|
||||||
|
20050227
|
||||||
|
|
||||||
|
Bugfix (bug introduced 20040331): with SIGHUP ignored, the
|
||||||
|
postdrop signal handler would effectively ignore SIGINT,
|
||||||
|
SIGQUIT and SIGTERM. Simplified the overly-conservative
|
||||||
|
protection against nested signals in postdrop. File:
|
||||||
|
postdrop/postdrop.c.
|
||||||
|
|
||||||
|
20050321
|
||||||
|
|
||||||
|
Robustness: don't look for SMTP status code when there was
|
||||||
|
none. File: smtp/smtp_chat.c, lmtp/lmtp_chat.c.
|
||||||
|
|
||||||
|
20050327
|
||||||
|
|
||||||
|
Bugfix: the SMTP and LMTP clients did not ask the queue
|
||||||
|
manager to reduce destination concurrency when "lost
|
||||||
|
connection" or "connection timed out" happened AFTER Postfix
|
||||||
|
received the server greeting. Files: smtp/smtp_trouble.c,
|
||||||
|
lmtp/lmtp-trouble.c.
|
||||||
|
|
||||||
|
20050407
|
||||||
|
|
||||||
|
@%^!#& Thanks to inadequate SASL documentation the client
|
||||||
|
could negotiate a security layer where none was desired.
|
||||||
|
Better documentation has become available since Postfix
|
||||||
|
SASL support was implemented, and now Postfix needs to be
|
||||||
|
fixed. Files: */*_sasl_glue.c.
|
||||||
|
|
||||||
|
20050412
|
||||||
|
|
||||||
|
Bugfix: while updating the cleanup_flush() infrastructure
|
||||||
|
in the 2.3 development release, eliminated a portability
|
||||||
|
problem that was introduced when "REJECT text" support was
|
||||||
|
added. File: cleanup/cleanup.c.
|
||||||
|
|
||||||
|
20050417
|
||||||
|
|
||||||
|
Safety: don't call syslog from a user-triggered signal
|
||||||
|
handler. File: postdrop/postdrop.c.
|
||||||
|
@@ -111,7 +111,7 @@ This is configured by editing the master.cf file:
|
|||||||
# After-filter SMTP server. Receive mail from the content filter
|
# After-filter SMTP server. Receive mail from the content filter
|
||||||
# on localhost port 10026.
|
# on localhost port 10026.
|
||||||
#
|
#
|
||||||
:10026 inet n - n - - smtpd
|
127.0.0.1:10026 inet n - n - - smtpd
|
||||||
-o smtpd_authorized_xforward_hosts=127.0.0.0/8
|
-o smtpd_authorized_xforward_hosts=127.0.0.0/8
|
||||||
-o smtpd_client_restrictions=
|
-o smtpd_client_restrictions=
|
||||||
-o smtpd_helo_restrictions=
|
-o smtpd_helo_restrictions=
|
||||||
@@ -145,9 +145,9 @@ master.cf file:
|
|||||||
|
|
||||||
The after-filter SMTP server is a new master.cf entry:
|
The after-filter SMTP server is a new master.cf entry:
|
||||||
|
|
||||||
* The ":10026" makes the after-filter SMTP server listen on the localhost
|
* The "127.0.0.1:10026" makes the after-filter SMTP server listen on the
|
||||||
address only, without exposing it to the network. NEVER expose the after-
|
localhost address only, without exposing it to the network. NEVER expose
|
||||||
filter SMTP server to the Internet :-)
|
the after-filter SMTP server to the Internet :-)
|
||||||
|
|
||||||
* The "-o smtpd_authorized_xforward_hosts=127.0.0.0/8" allows the after-
|
* The "-o smtpd_authorized_xforward_hosts=127.0.0.0/8" allows the after-
|
||||||
filter SMTP server to receive remote SMTP client information from the
|
filter SMTP server to receive remote SMTP client information from the
|
||||||
@@ -168,8 +168,8 @@ CCoonnffiigguurraattiioonn ppaarraammeetteerrss
|
|||||||
Parameters that control proxying:
|
Parameters that control proxying:
|
||||||
|
|
||||||
* smtpd_proxy_filter (syntax: host:port): The host and TCP port of the
|
* smtpd_proxy_filter (syntax: host:port): The host and TCP port of the
|
||||||
before-queue content filter. When no host or host: is specified, localhost
|
before-queue content filter. When no host or host: is specified in client
|
||||||
is assumed.
|
context, localhost is assumed.
|
||||||
|
|
||||||
* smtpd_proxy_timeout (default: 100s): Timeout for connecting to the before-
|
* smtpd_proxy_timeout (default: 100s): Timeout for connecting to the before-
|
||||||
queue content filter and for sending and receiving commands and data. All
|
queue content filter and for sending and receiving commands and data. All
|
||||||
|
@@ -67,6 +67,11 @@ The form user@[ipaddress] is still allowed.
|
|||||||
[Incompat 20031226] Bounce messages now have a separate queue life
|
[Incompat 20031226] Bounce messages now have a separate queue life
|
||||||
time. This is controlled by the bounce_queue_lifetime parameter.
|
time. This is controlled by the bounce_queue_lifetime parameter.
|
||||||
|
|
||||||
|
[Incompat 20031019] The authorized_verp_clients parameter was
|
||||||
|
renamed to smtpd_authorized_verp_clients, and the default value
|
||||||
|
was changed to disable this feature. You now have to turn it on
|
||||||
|
explicitly.
|
||||||
|
|
||||||
Major changes - build environment
|
Major changes - build environment
|
||||||
---------------------------------
|
---------------------------------
|
||||||
|
|
||||||
|
@@ -28,7 +28,7 @@
|
|||||||
# domain distribution. By default the recipient distribution is
|
# domain distribution. By default the recipient distribution is
|
||||||
# displayed. There can be more recipients than messages, but as
|
# displayed. There can be more recipients than messages, but as
|
||||||
# each message has only one sender, the sender distribution is a
|
# each message has only one sender, the sender distribution is a
|
||||||
# a message distribution.
|
# message distribution.
|
||||||
# .IP \fB-p\fR
|
# .IP \fB-p\fR
|
||||||
# Generate aggregate statistics for parent domains. Top level domains
|
# Generate aggregate statistics for parent domains. Top level domains
|
||||||
# are not shown, nor are domains with fewer than \fImin_subdomains\fR
|
# are not shown, nor are domains with fewer than \fImin_subdomains\fR
|
||||||
@@ -43,7 +43,7 @@
|
|||||||
# or "buckets". Each bucket has a maximum queue age that is twice
|
# or "buckets". Each bucket has a maximum queue age that is twice
|
||||||
# as large as that of the previous bucket. The last bucket has no
|
# as large as that of the previous bucket. The last bucket has no
|
||||||
# age limit.
|
# age limit.
|
||||||
# .IP "\fB-b \fIbucket_time\fR"
|
# .IP "\fB-t \fIbucket_time\fR"
|
||||||
# The age limit in minutes for the first time bucket. The default
|
# The age limit in minutes for the first time bucket. The default
|
||||||
# value is 5, meaning that the first bucket counts messages between
|
# value is 5, meaning that the first bucket counts messages between
|
||||||
# 0 and 5 minutes old.
|
# 0 and 5 minutes old.
|
||||||
@@ -51,7 +51,7 @@
|
|||||||
# The output is right justified, with the counts for the last
|
# The output is right justified, with the counts for the last
|
||||||
# bucket shown on the 80th column, the \fIterminal_width\fR can be
|
# bucket shown on the 80th column, the \fIterminal_width\fR can be
|
||||||
# adjusted for wider screens allowing more buckets to be displayed
|
# adjusted for wider screens allowing more buckets to be displayed
|
||||||
# with truncating the domain names on the left. When a row for a
|
# without truncating the domain names on the left. When a row for a
|
||||||
# full domain name and its counters does not fit in the specified
|
# full domain name and its counters does not fit in the specified
|
||||||
# number of columns, only the last 17 bytes of the domain name
|
# number of columns, only the last 17 bytes of the domain name
|
||||||
# are shown with the prefix replaced by a '+' character. Truncated
|
# are shown with the prefix replaced by a '+' character. Truncated
|
||||||
@@ -76,8 +76,8 @@
|
|||||||
# absolute path for each queue subdirectory even if you want the
|
# absolute path for each queue subdirectory even if you want the
|
||||||
# default incoming and active queue distribution.
|
# default incoming and active queue distribution.
|
||||||
# SEE ALSO
|
# SEE ALSO
|
||||||
# mailq(1) List all messages in the queue.
|
# mailq(1), List all messages in the queue.
|
||||||
# QSHAPE_README Examples and background material.
|
# QSHAPE_README, Examples and background material.
|
||||||
# FILES
|
# FILES
|
||||||
# $config_directory/main.cf, Postfix installation parameters.
|
# $config_directory/main.cf, Postfix installation parameters.
|
||||||
# $queue_directory/maildrop/, local submission directory.
|
# $queue_directory/maildrop/, local submission directory.
|
||||||
@@ -258,8 +258,9 @@ sub wanted {
|
|||||||
++$q{"TOTAL"}->[0];
|
++$q{"TOTAL"}->[0];
|
||||||
++$q{"TOTAL"}->[$b];
|
++$q{"TOTAL"}->[$b];
|
||||||
$a = "MAILER-DAEMON" if ($a eq "");
|
$a = "MAILER-DAEMON" if ($a eq "");
|
||||||
$a =~ s/.*\@\.*(.*[^.])?\.*$/$1/;
|
$a =~ s/.*\@//;
|
||||||
$a =~ s/\.\././g;
|
$a =~ s/\.\././g;
|
||||||
|
$a =~ s/\.?(.+?)\.?$/$1/;
|
||||||
my $new = 0;
|
my $new = 0;
|
||||||
do {
|
do {
|
||||||
my $old = (++$q{$a}->[0] > 1);
|
my $old = (++$q{$a}->[0] > 1);
|
||||||
|
@@ -473,7 +473,12 @@ test -n "$create" && {
|
|||||||
test -n "$set_permission" && {
|
test -n "$set_permission" && {
|
||||||
chown $recursive $owner $path || exit 1
|
chown $recursive $owner $path || exit 1
|
||||||
test -z "$group" || chgrp $recursive $group $path || exit 1
|
test -z "$group" || chgrp $recursive $group $path || exit 1
|
||||||
chmod $recursive $mode $path || exit 1
|
if [ "$type" = "d" -a -n "$recursive" ]
|
||||||
|
then
|
||||||
|
find $path -type d -exec chmod $mode "{}" ";"
|
||||||
|
else
|
||||||
|
chmod $mode $path
|
||||||
|
fi || exit 1
|
||||||
}
|
}
|
||||||
done
|
done
|
||||||
IFS="$BACKUP_IFS"
|
IFS="$BACKUP_IFS"
|
||||||
|
@@ -240,7 +240,7 @@ PERL/SMTP content filtering framework. See:
|
|||||||
# After-filter SMTP server. Receive mail from the content filter
|
# After-filter SMTP server. Receive mail from the content filter
|
||||||
# on localhost port 10026.
|
# on localhost port 10026.
|
||||||
#
|
#
|
||||||
:10026 inet n - n - - smtpd
|
127.0.0.1:10026 inet n - n - - smtpd
|
||||||
-o <a href="postconf.5.html#smtpd_authorized_xforward_hosts">smtpd_authorized_xforward_hosts</a>=127.0.0.0/8
|
-o <a href="postconf.5.html#smtpd_authorized_xforward_hosts">smtpd_authorized_xforward_hosts</a>=127.0.0.0/8
|
||||||
-o <a href="postconf.5.html#smtpd_client_restrictions">smtpd_client_restrictions</a>=
|
-o <a href="postconf.5.html#smtpd_client_restrictions">smtpd_client_restrictions</a>=
|
||||||
-o <a href="postconf.5.html#smtpd_helo_restrictions">smtpd_helo_restrictions</a>=
|
-o <a href="postconf.5.html#smtpd_helo_restrictions">smtpd_helo_restrictions</a>=
|
||||||
@@ -283,7 +283,8 @@ the top of the master.cf file: </p>
|
|||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
|
|
||||||
<li> <p> The ":10026" makes the after-filter SMTP server listen
|
<li> <p> The "127.0.0.1:10026" makes the after-filter SMTP
|
||||||
|
server listen
|
||||||
on the localhost address only, without exposing it to the
|
on the localhost address only, without exposing it to the
|
||||||
network. NEVER expose the after-filter SMTP server to the
|
network. NEVER expose the after-filter SMTP server to the
|
||||||
Internet :-) </p>
|
Internet :-) </p>
|
||||||
@@ -314,7 +315,7 @@ can't control when the remote SMTP client times out. </p>
|
|||||||
|
|
||||||
<li> <p> <a href="postconf.5.html#smtpd_proxy_filter">smtpd_proxy_filter</a> (syntax: host:port): The host and TCP
|
<li> <p> <a href="postconf.5.html#smtpd_proxy_filter">smtpd_proxy_filter</a> (syntax: host:port): The host and TCP
|
||||||
port of the before-queue content filter. When no host or host:
|
port of the before-queue content filter. When no host or host:
|
||||||
is specified, localhost is assumed. </p>
|
is specified in client context, localhost is assumed. </p>
|
||||||
|
|
||||||
<li> <p> <a href="postconf.5.html#smtpd_proxy_timeout">smtpd_proxy_timeout</a> (default: 100s): Timeout for connecting
|
<li> <p> <a href="postconf.5.html#smtpd_proxy_timeout">smtpd_proxy_timeout</a> (default: 100s): Timeout for connecting
|
||||||
to the before-queue content filter and for sending and receiving
|
to the before-queue content filter and for sending and receiving
|
||||||
|
@@ -306,9 +306,9 @@ CLEANUP(8) CLEANUP(8)
|
|||||||
The internet hostname of this mail system.
|
The internet hostname of this mail system.
|
||||||
|
|
||||||
<b><a href="postconf.5.html#myorigin">myorigin</a> ($<a href="postconf.5.html#myhostname">myhostname</a>)</b>
|
<b><a href="postconf.5.html#myorigin">myorigin</a> ($<a href="postconf.5.html#myhostname">myhostname</a>)</b>
|
||||||
The default domain name that locally-posted mail
|
The domain name that locally-posted mail appears to
|
||||||
appears to come from, and that locally posted mail
|
come from, and that locally posted mail is deliv-
|
||||||
is delivered to.
|
ered 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 pro-
|
The process ID of a Postfix command or daemon pro-
|
||||||
|
@@ -288,9 +288,9 @@ LOCAL(8) LOCAL(8)
|
|||||||
|
|
||||||
<b><a href="postconf.5.html#owner_request_special">owner_request_special</a> (yes)</b>
|
<b><a href="postconf.5.html#owner_request_special">owner_request_special</a> (yes)</b>
|
||||||
Give special treatment to owner-listname and list-
|
Give special treatment to owner-listname and list-
|
||||||
name-request address localparts: don't don't split
|
name-request address localparts: don't split such
|
||||||
such addresses when the <a href="postconf.5.html#recipient_delimiter">recipient_delimiter</a> is set
|
addresses when the <a href="postconf.5.html#recipient_delimiter">recipient_delimiter</a> is set to
|
||||||
to "-".
|
"-".
|
||||||
|
|
||||||
<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.
|
||||||
|
@@ -1843,7 +1843,8 @@ time keeping on System-V-ish systems.
|
|||||||
|
|
||||||
<p>
|
<p>
|
||||||
Specify a list of names and/or name=value pairs, separated by
|
Specify a list of names and/or name=value pairs, separated by
|
||||||
whitespace or comma.
|
whitespace or comma. The name=value form is supported with
|
||||||
|
Postfix 2.1 and later.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
@@ -3916,7 +3917,7 @@ Examples:
|
|||||||
|
|
||||||
<p>
|
<p>
|
||||||
Give special treatment to owner-listname and listname-request
|
Give special treatment to owner-listname and listname-request
|
||||||
address localparts: don't don't split such addresses when the
|
address localparts: don't split such addresses when the
|
||||||
<a href="postconf.5.html#recipient_delimiter">recipient_delimiter</a> is set to "-". This feature is useful for
|
<a href="postconf.5.html#recipient_delimiter">recipient_delimiter</a> is set to "-". This feature is useful for
|
||||||
mailing lists.
|
mailing lists.
|
||||||
</p>
|
</p>
|
||||||
@@ -7936,7 +7937,7 @@ open a security hole.
|
|||||||
<p> Optional lookup tables with a) names of domains for which all
|
<p> Optional lookup tables with a) names of domains for which all
|
||||||
addresses are aliased to addresses in other local or remote domains,
|
addresses are aliased to addresses in other local or remote domains,
|
||||||
and b) addresses that are aliased to addresses in other local or
|
and b) addresses that are aliased to addresses in other local or
|
||||||
remote domains. Available before Postfix version 2.0. With Postfix 2.1
|
remote domains. Available before Postfix version 2.0. With Postfix 2.0
|
||||||
and later, this is replaced by separate controls: <a href="postconf.5.html#virtual_alias_domains">virtual_alias_domains</a>
|
and later, this is replaced by separate controls: <a href="postconf.5.html#virtual_alias_domains">virtual_alias_domains</a>
|
||||||
and <a href="postconf.5.html#virtual_alias_maps">virtual_alias_maps</a>. </p>
|
and <a href="postconf.5.html#virtual_alias_maps">virtual_alias_maps</a>. </p>
|
||||||
|
|
||||||
|
@@ -29,7 +29,7 @@ QSHAPE(1) QSHAPE(1)
|
|||||||
the recipient domain distribution. By default the
|
the recipient domain distribution. By default the
|
||||||
recipient distribution is displayed. There can be
|
recipient distribution is displayed. There can be
|
||||||
more recipients than messages, but as each message
|
more recipients than messages, but as each message
|
||||||
has only one sender, the sender distribution is a a
|
has only one sender, the sender distribution is a
|
||||||
message distribution.
|
message distribution.
|
||||||
|
|
||||||
<b>-p</b> Generate aggregate statistics for parent domains.
|
<b>-p</b> Generate aggregate statistics for parent domains.
|
||||||
@@ -51,7 +51,7 @@ QSHAPE(1) QSHAPE(1)
|
|||||||
large as that of the previous bucket. The last
|
large as that of the previous bucket. The last
|
||||||
bucket has no age limit.
|
bucket has no age limit.
|
||||||
|
|
||||||
<b>-b</b> <i>bucket</i><b>_</b><i>time</i>
|
<b>-t</b> <i>bucket</i><b>_</b><i>time</i>
|
||||||
The age limit in minutes for the first time bucket.
|
The age limit in minutes for the first time bucket.
|
||||||
The default value is 5, meaning that the first
|
The default value is 5, meaning that the first
|
||||||
bucket counts messages between 0 and 5 minutes old.
|
bucket counts messages between 0 and 5 minutes old.
|
||||||
@@ -60,9 +60,9 @@ QSHAPE(1) QSHAPE(1)
|
|||||||
The output is right justified, with the counts for
|
The output is right justified, with the counts for
|
||||||
the last bucket shown on the 80th column, the <i>ter-</i>
|
the last bucket shown on the 80th column, the <i>ter-</i>
|
||||||
<i>minal</i><b>_</b><i>width</i> can be adjusted for wider screens
|
<i>minal</i><b>_</b><i>width</i> can be adjusted for wider screens
|
||||||
allowing more buckets to be displayed with truncat-
|
allowing more buckets to be displayed without trun-
|
||||||
ing the domain names on the left. When a row for a
|
cating the domain names on the left. When a row for
|
||||||
full domain name and its counters does not fit in
|
a full domain name and its counters does not fit in
|
||||||
the specified number of columns, only the last 17
|
the specified number of columns, only the last 17
|
||||||
bytes of the domain name are shown with the prefix
|
bytes of the domain name are shown with the prefix
|
||||||
replaced by a '+' character. Truncated parent
|
replaced by a '+' character. Truncated parent
|
||||||
@@ -94,8 +94,8 @@ QSHAPE(1) QSHAPE(1)
|
|||||||
<a href="QSHAPE_README.html#incoming_queue">incoming</a> and <a href="QSHAPE_README.html#active_queue">active queue</a> distribution.
|
<a href="QSHAPE_README.html#incoming_queue">incoming</a> and <a href="QSHAPE_README.html#active_queue">active queue</a> distribution.
|
||||||
|
|
||||||
<b>SEE ALSO</b>
|
<b>SEE ALSO</b>
|
||||||
<a href="mailq.1.html">mailq(1)</a> List all messages in the queue.
|
<a href="mailq.1.html">mailq(1)</a>, List all messages in the queue.
|
||||||
<a href="QSHAPE_README.html">QSHAPE_README</a> Examples and background material.
|
<a href="QSHAPE_README.html">QSHAPE_README</a>, Examples and background material.
|
||||||
|
|
||||||
<b>FILES</b>
|
<b>FILES</b>
|
||||||
$<a href="postconf.5.html#config_directory">config_directory</a>/main.cf, Postfix installation parameters.
|
$<a href="postconf.5.html#config_directory">config_directory</a>/main.cf, Postfix installation parameters.
|
||||||
|
@@ -29,7 +29,7 @@ Display the sender domain distribution instead of the recipient
|
|||||||
domain distribution. By default the recipient distribution is
|
domain distribution. By default the recipient distribution is
|
||||||
displayed. There can be more recipients than messages, but as
|
displayed. There can be more recipients than messages, but as
|
||||||
each message has only one sender, the sender distribution is a
|
each message has only one sender, the sender distribution is a
|
||||||
a message distribution.
|
message distribution.
|
||||||
.IP \fB-p\fR
|
.IP \fB-p\fR
|
||||||
Generate aggregate statistics for parent domains. Top level domains
|
Generate aggregate statistics for parent domains. Top level domains
|
||||||
are not shown, nor are domains with fewer than \fImin_subdomains\fR
|
are not shown, nor are domains with fewer than \fImin_subdomains\fR
|
||||||
@@ -44,7 +44,7 @@ increasing intervals. This option sets the number of intervals
|
|||||||
or "buckets". Each bucket has a maximum queue age that is twice
|
or "buckets". Each bucket has a maximum queue age that is twice
|
||||||
as large as that of the previous bucket. The last bucket has no
|
as large as that of the previous bucket. The last bucket has no
|
||||||
age limit.
|
age limit.
|
||||||
.IP "\fB-b \fIbucket_time\fR"
|
.IP "\fB-t \fIbucket_time\fR"
|
||||||
The age limit in minutes for the first time bucket. The default
|
The age limit in minutes for the first time bucket. The default
|
||||||
value is 5, meaning that the first bucket counts messages between
|
value is 5, meaning that the first bucket counts messages between
|
||||||
0 and 5 minutes old.
|
0 and 5 minutes old.
|
||||||
@@ -52,7 +52,7 @@ value is 5, meaning that the first bucket counts messages between
|
|||||||
The output is right justified, with the counts for the last
|
The output is right justified, with the counts for the last
|
||||||
bucket shown on the 80th column, the \fIterminal_width\fR can be
|
bucket shown on the 80th column, the \fIterminal_width\fR can be
|
||||||
adjusted for wider screens allowing more buckets to be displayed
|
adjusted for wider screens allowing more buckets to be displayed
|
||||||
with truncating the domain names on the left. When a row for a
|
without truncating the domain names on the left. When a row for a
|
||||||
full domain name and its counters does not fit in the specified
|
full domain name and its counters does not fit in the specified
|
||||||
number of columns, only the last 17 bytes of the domain name
|
number of columns, only the last 17 bytes of the domain name
|
||||||
are shown with the prefix replaced by a '+' character. Truncated
|
are shown with the prefix replaced by a '+' character. Truncated
|
||||||
@@ -79,8 +79,8 @@ default incoming and active queue distribution.
|
|||||||
.SH "SEE ALSO"
|
.SH "SEE ALSO"
|
||||||
.na
|
.na
|
||||||
.nf
|
.nf
|
||||||
mailq(1) List all messages in the queue.
|
mailq(1), List all messages in the queue.
|
||||||
QSHAPE_README Examples and background material.
|
QSHAPE_README, Examples and background material.
|
||||||
.SH "FILES"
|
.SH "FILES"
|
||||||
.na
|
.na
|
||||||
.nf
|
.nf
|
||||||
|
@@ -383,7 +383,7 @@ and changed the default to none.
|
|||||||
Specify a list of network/netmask patterns, separated by commas
|
Specify a list of network/netmask patterns, separated by commas
|
||||||
and/or whitespace. The mask specifies the number of bits in the
|
and/or whitespace. The mask specifies the number of bits in the
|
||||||
network part of a host address. You can also specify hostnames or
|
network part of a host address. You can also specify hostnames or
|
||||||
.domain names (the initial dot causes the domain to match any name
|
\&.domain names (the initial dot causes the domain to match any name
|
||||||
below it), "/file/name" or "type:table" patterns. A "/file/name"
|
below it), "/file/name" or "type:table" patterns. A "/file/name"
|
||||||
pattern is replaced by its contents; a "type:table" lookup table
|
pattern is replaced by its contents; a "type:table" lookup table
|
||||||
is matched when a table entry matches a lookup string (the lookup
|
is matched when a table entry matches a lookup string (the lookup
|
||||||
@@ -579,7 +579,7 @@ debug_peer_list = some.domain
|
|||||||
The external command to execute when a Postfix daemon program is
|
The external command to execute when a Postfix daemon program is
|
||||||
invoked with the -D option.
|
invoked with the -D option.
|
||||||
.PP
|
.PP
|
||||||
Use "command .. & sleep 5" so that the debugger can attach before
|
Use "command .. & sleep 5" so that the debugger can attach before
|
||||||
the process marches on. If you use an X-based debugger, be sure to
|
the process marches on. If you use an X-based debugger, be sure to
|
||||||
set up your XAUTHORITY environment variable before starting Postfix.
|
set up your XAUTHORITY environment variable before starting Postfix.
|
||||||
.PP
|
.PP
|
||||||
@@ -590,7 +590,7 @@ Example:
|
|||||||
.ft C
|
.ft C
|
||||||
debugger_command =
|
debugger_command =
|
||||||
PATH=/usr/bin:/usr/X11R6/bin
|
PATH=/usr/bin:/usr/X11R6/bin
|
||||||
xxgdb $daemon_directory/$process_name $process_id & sleep 5
|
xxgdb $daemon_directory/$process_name $process_id & sleep 5
|
||||||
.fi
|
.fi
|
||||||
.ad
|
.ad
|
||||||
.ft R
|
.ft R
|
||||||
@@ -931,7 +931,8 @@ to non-Postfix processes. The TZ variable is needed for sane
|
|||||||
time keeping on System-V-ish systems.
|
time keeping on System-V-ish systems.
|
||||||
.PP
|
.PP
|
||||||
Specify a list of names and/or name=value pairs, separated by
|
Specify a list of names and/or name=value pairs, separated by
|
||||||
whitespace or comma.
|
whitespace or comma. The name=value form is supported with
|
||||||
|
Postfix 2.1 and later.
|
||||||
.PP
|
.PP
|
||||||
Example:
|
Example:
|
||||||
.PP
|
.PP
|
||||||
@@ -2012,7 +2013,7 @@ notify_classes = 2bounce, resource, software
|
|||||||
.ft R
|
.ft R
|
||||||
.SH owner_request_special (default: yes)
|
.SH owner_request_special (default: yes)
|
||||||
Give special treatment to owner-listname and listname-request
|
Give special treatment to owner-listname and listname-request
|
||||||
address localparts: don't don't split such addresses when the
|
address localparts: don't split such addresses when the
|
||||||
recipient_delimiter is set to "-". This feature is useful for
|
recipient_delimiter is set to "-". This feature is useful for
|
||||||
mailing lists.
|
mailing lists.
|
||||||
.SH parent_domain_matches_subdomains (default: see "postconf -d" output)
|
.SH parent_domain_matches_subdomains (default: see "postconf -d" output)
|
||||||
@@ -2903,7 +2904,7 @@ is backwards compatible with Postfix 2.0.
|
|||||||
Specify a list of network/netmask patterns, separated by commas
|
Specify a list of network/netmask patterns, separated by commas
|
||||||
and/or whitespace. The mask specifies the number of bits in the
|
and/or whitespace. The mask specifies the number of bits in the
|
||||||
network part of a host address. You can also specify hostnames or
|
network part of a host address. You can also specify hostnames or
|
||||||
.domain names (the initial dot causes the domain to match any name
|
\&.domain names (the initial dot causes the domain to match any name
|
||||||
below it), "/file/name" or "type:table" patterns. A "/file/name"
|
below it), "/file/name" or "type:table" patterns. A "/file/name"
|
||||||
pattern is replaced by its contents; a "type:table" lookup table
|
pattern is replaced by its contents; a "type:table" lookup table
|
||||||
is matched when a table entry matches a lookup string (the lookup
|
is matched when a table entry matches a lookup string (the lookup
|
||||||
@@ -2923,7 +2924,7 @@ By default, no clients are allowed to specify XCLIENT.
|
|||||||
Specify a list of network/netmask patterns, separated by commas
|
Specify a list of network/netmask patterns, separated by commas
|
||||||
and/or whitespace. The mask specifies the number of bits in the
|
and/or whitespace. The mask specifies the number of bits in the
|
||||||
network part of a host address. You can also specify hostnames or
|
network part of a host address. You can also specify hostnames or
|
||||||
.domain names (the initial dot causes the domain to match any name
|
\&.domain names (the initial dot causes the domain to match any name
|
||||||
below it), "/file/name" or "type:table" patterns. A "/file/name"
|
below it), "/file/name" or "type:table" patterns. A "/file/name"
|
||||||
pattern is replaced by its contents; a "type:table" lookup table
|
pattern is replaced by its contents; a "type:table" lookup table
|
||||||
is matched when a table entry matches a lookup string (the lookup
|
is matched when a table entry matches a lookup string (the lookup
|
||||||
@@ -2942,7 +2943,7 @@ By default, no clients are allowed to specify XFORWARD.
|
|||||||
Specify a list of network/netmask patterns, separated by commas
|
Specify a list of network/netmask patterns, separated by commas
|
||||||
and/or whitespace. The mask specifies the number of bits in the
|
and/or whitespace. The mask specifies the number of bits in the
|
||||||
network part of a host address. You can also specify hostnames or
|
network part of a host address. You can also specify hostnames or
|
||||||
.domain names (the initial dot causes the domain to match any name
|
\&.domain names (the initial dot causes the domain to match any name
|
||||||
below it), "/file/name" or "type:table" patterns. A "/file/name"
|
below it), "/file/name" or "type:table" patterns. A "/file/name"
|
||||||
pattern is replaced by its contents; a "type:table" lookup table
|
pattern is replaced by its contents; a "type:table" lookup table
|
||||||
is matched when a table entry matches a lookup string (the lookup
|
is matched when a table entry matches a lookup string (the lookup
|
||||||
@@ -4263,7 +4264,7 @@ open a security hole.
|
|||||||
Optional lookup tables with a) names of domains for which all
|
Optional lookup tables with a) names of domains for which all
|
||||||
addresses are aliased to addresses in other local or remote domains,
|
addresses are aliased to addresses in other local or remote domains,
|
||||||
and b) addresses that are aliased to addresses in other local or
|
and b) addresses that are aliased to addresses in other local or
|
||||||
remote domains. Available before Postfix version 2.0. With Postfix 2.1
|
remote domains. Available before Postfix version 2.0. With Postfix 2.0
|
||||||
and later, this is replaced by separate controls: virtual_alias_domains
|
and later, this is replaced by separate controls: virtual_alias_domains
|
||||||
and virtual_alias_maps.
|
and virtual_alias_maps.
|
||||||
.SH virtual_minimum_uid (default: 100)
|
.SH virtual_minimum_uid (default: 100)
|
||||||
|
@@ -260,7 +260,7 @@ process terminates.
|
|||||||
.IP "\fBmyhostname (see 'postconf -d' output)\fR"
|
.IP "\fBmyhostname (see 'postconf -d' output)\fR"
|
||||||
The internet hostname of this mail system.
|
The internet hostname of this mail system.
|
||||||
.IP "\fBmyorigin ($myhostname)\fR"
|
.IP "\fBmyorigin ($myhostname)\fR"
|
||||||
The default domain name that locally-posted mail appears to come
|
The domain name that locally-posted mail appears to come
|
||||||
from, and that locally posted mail is delivered to.
|
from, and that locally posted mail is 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.
|
||||||
|
@@ -315,7 +315,7 @@ companion alias, set the envelope sender address to the expansion
|
|||||||
of the "owner-aliasname" alias.
|
of the "owner-aliasname" alias.
|
||||||
.IP "\fBowner_request_special (yes)\fR"
|
.IP "\fBowner_request_special (yes)\fR"
|
||||||
Give special treatment to owner-listname and listname-request
|
Give special treatment to owner-listname and listname-request
|
||||||
address localparts: don't don't split such addresses when the
|
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.
|
||||||
|
@@ -31,6 +31,7 @@ while(<>) {
|
|||||||
$block .= $_;
|
$block .= $_;
|
||||||
} while(($_ = <>) && /\S/);
|
} while(($_ = <>) && /\S/);
|
||||||
|
|
||||||
|
$block =~ s/\n\./\n\\\&./g;
|
||||||
if ($block =~ /<H2>/) {
|
if ($block =~ /<H2>/) {
|
||||||
$block =~ s/<H2><a[^>]+>([^<]+)<\/a><\/H2>/\n.SH \1\n/g;
|
$block =~ s/<H2><a[^>]+>([^<]+)<\/a><\/H2>/\n.SH \1\n/g;
|
||||||
$block =~ tr/a-z/A-Z/;
|
$block =~ tr/a-z/A-Z/;
|
||||||
@@ -68,6 +69,7 @@ while(<>) {
|
|||||||
$block =~ s/<br>\s*/\n.br\n/g;
|
$block =~ s/<br>\s*/\n.br\n/g;
|
||||||
$block =~ s/</</g;
|
$block =~ s/</</g;
|
||||||
$block =~ s/>/>/g;
|
$block =~ s/>/>/g;
|
||||||
|
$block =~ s/&/\&/g;
|
||||||
$block =~ s/\s+\n/\n/g;
|
$block =~ s/\s+\n/\n/g;
|
||||||
$block =~ s/^\n//g;
|
$block =~ s/^\n//g;
|
||||||
print $block;
|
print $block;
|
||||||
|
@@ -240,7 +240,7 @@ http://bent.latency.net/smtpprox/. </p>
|
|||||||
# After-filter SMTP server. Receive mail from the content filter
|
# After-filter SMTP server. Receive mail from the content filter
|
||||||
# on localhost port 10026.
|
# on localhost port 10026.
|
||||||
#
|
#
|
||||||
:10026 inet n - n - - smtpd
|
127.0.0.1:10026 inet n - n - - smtpd
|
||||||
-o smtpd_authorized_xforward_hosts=127.0.0.0/8
|
-o smtpd_authorized_xforward_hosts=127.0.0.0/8
|
||||||
-o smtpd_client_restrictions=
|
-o smtpd_client_restrictions=
|
||||||
-o smtpd_helo_restrictions=
|
-o smtpd_helo_restrictions=
|
||||||
@@ -283,7 +283,8 @@ the top of the master.cf file: </p>
|
|||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
|
|
||||||
<li> <p> The ":10026" makes the after-filter SMTP server listen
|
<li> <p> The "127.0.0.1:10026" makes the after-filter SMTP
|
||||||
|
server listen
|
||||||
on the localhost address only, without exposing it to the
|
on the localhost address only, without exposing it to the
|
||||||
network. NEVER expose the after-filter SMTP server to the
|
network. NEVER expose the after-filter SMTP server to the
|
||||||
Internet :-) </p>
|
Internet :-) </p>
|
||||||
@@ -314,7 +315,7 @@ can't control when the remote SMTP client times out. </p>
|
|||||||
|
|
||||||
<li> <p> smtpd_proxy_filter (syntax: host:port): The host and TCP
|
<li> <p> smtpd_proxy_filter (syntax: host:port): The host and TCP
|
||||||
port of the before-queue content filter. When no host or host:
|
port of the before-queue content filter. When no host or host:
|
||||||
is specified, localhost is assumed. </p>
|
is specified in client context, localhost is assumed. </p>
|
||||||
|
|
||||||
<li> <p> smtpd_proxy_timeout (default: 100s): Timeout for connecting
|
<li> <p> smtpd_proxy_timeout (default: 100s): Timeout for connecting
|
||||||
to the before-queue content filter and for sending and receiving
|
to the before-queue content filter and for sending and receiving
|
||||||
|
@@ -1096,7 +1096,8 @@ time keeping on System-V-ish systems.
|
|||||||
|
|
||||||
<p>
|
<p>
|
||||||
Specify a list of names and/or name=value pairs, separated by
|
Specify a list of names and/or name=value pairs, separated by
|
||||||
whitespace or comma.
|
whitespace or comma. The name=value form is supported with
|
||||||
|
Postfix 2.1 and later.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
@@ -5938,7 +5939,7 @@ or reject_non_fqdn_recipient restriction.
|
|||||||
|
|
||||||
<p>
|
<p>
|
||||||
Give special treatment to owner-listname and listname-request
|
Give special treatment to owner-listname and listname-request
|
||||||
address localparts: don't don't split such addresses when the
|
address localparts: don't split such addresses when the
|
||||||
recipient_delimiter is set to "-". This feature is useful for
|
recipient_delimiter is set to "-". This feature is useful for
|
||||||
mailing lists.
|
mailing lists.
|
||||||
</p>
|
</p>
|
||||||
@@ -6784,6 +6785,6 @@ parameter in the default main.cf file. </p>
|
|||||||
<p> Optional lookup tables with a) names of domains for which all
|
<p> Optional lookup tables with a) names of domains for which all
|
||||||
addresses are aliased to addresses in other local or remote domains,
|
addresses are aliased to addresses in other local or remote domains,
|
||||||
and b) addresses that are aliased to addresses in other local or
|
and b) addresses that are aliased to addresses in other local or
|
||||||
remote domains. Available before Postfix version 2.0. With Postfix 2.1
|
remote domains. Available before Postfix version 2.0. With Postfix 2.0
|
||||||
and later, this is replaced by separate controls: virtual_alias_domains
|
and later, this is replaced by separate controls: virtual_alias_domains
|
||||||
and virtual_alias_maps. </p>
|
and virtual_alias_maps. </p>
|
||||||
|
@@ -460,7 +460,7 @@ int bounce_boilerplate(VSTREAM *bounce, BOUNCE_INFO *bounce_info)
|
|||||||
post_mail_fputs(bounce, "");
|
post_mail_fputs(bounce, "");
|
||||||
if (bounce_info->flush == BOUNCE_MSG_FAIL) {
|
if (bounce_info->flush == BOUNCE_MSG_FAIL) {
|
||||||
post_mail_fputs(bounce,
|
post_mail_fputs(bounce,
|
||||||
"I'm sorry to have to inform you that your message could not be");
|
"I'm sorry to have to inform you that your message could not");
|
||||||
post_mail_fputs(bounce,
|
post_mail_fputs(bounce,
|
||||||
"be delivered to one or more recipients. It's attached below.");
|
"be delivered to one or more recipients. It's attached below.");
|
||||||
} else if (bounce_info->flush == BOUNCE_MSG_WARN) {
|
} else if (bounce_info->flush == BOUNCE_MSG_WARN) {
|
||||||
|
@@ -232,7 +232,7 @@
|
|||||||
/* .IP "\fBmyhostname (see 'postconf -d' output)\fR"
|
/* .IP "\fBmyhostname (see 'postconf -d' output)\fR"
|
||||||
/* The internet hostname of this mail system.
|
/* The internet hostname of this mail system.
|
||||||
/* .IP "\fBmyorigin ($myhostname)\fR"
|
/* .IP "\fBmyorigin ($myhostname)\fR"
|
||||||
/* The default domain name that locally-posted mail appears to come
|
/* The domain name that locally-posted mail appears to come
|
||||||
/* from, and that locally posted mail is delivered to.
|
/* from, and that locally posted mail is 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.
|
||||||
@@ -322,6 +322,7 @@ static void cleanup_service(VSTREAM *src, char *unused_service, char **argv)
|
|||||||
CLEANUP_STATE *state;
|
CLEANUP_STATE *state;
|
||||||
int flags;
|
int flags;
|
||||||
int type = 0;
|
int type = 0;
|
||||||
|
int status;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Sanity check. This service takes no command-line arguments.
|
* Sanity check. This service takes no command-line arguments.
|
||||||
@@ -387,8 +388,9 @@ static void cleanup_service(VSTREAM *src, char *unused_service, char **argv)
|
|||||||
/*
|
/*
|
||||||
* Finish this message, and report the result status to the client.
|
* Finish this message, and report the result status to the client.
|
||||||
*/
|
*/
|
||||||
|
status = cleanup_flush(state); /* in case state is modified */
|
||||||
attr_print(src, ATTR_FLAG_NONE,
|
attr_print(src, ATTR_FLAG_NONE,
|
||||||
ATTR_TYPE_NUM, MAIL_ATTR_STATUS, cleanup_flush(state),
|
ATTR_TYPE_NUM, MAIL_ATTR_STATUS, status,
|
||||||
ATTR_TYPE_STR, MAIL_ATTR_WHY, state->reason ?
|
ATTR_TYPE_STR, MAIL_ATTR_WHY, state->reason ?
|
||||||
state->reason : "",
|
state->reason : "",
|
||||||
ATTR_TYPE_END);
|
ATTR_TYPE_END);
|
||||||
|
@@ -20,8 +20,8 @@
|
|||||||
* Patches change the patchlevel and the release date. Snapshots change the
|
* Patches change the patchlevel and the release date. Snapshots change the
|
||||||
* release date only.
|
* release date only.
|
||||||
*/
|
*/
|
||||||
#define MAIL_RELEASE_DATE "20040915"
|
#define MAIL_RELEASE_DATE "20050509"
|
||||||
#define MAIL_VERSION_NUMBER "2.1.5"
|
#define MAIL_VERSION_NUMBER "2.1.6"
|
||||||
|
|
||||||
#define VAR_MAIL_VERSION "mail_version"
|
#define VAR_MAIL_VERSION "mail_version"
|
||||||
#ifdef SNAPSHOT
|
#ifdef SNAPSHOT
|
||||||
|
@@ -175,6 +175,7 @@ LMTP_RESP *lmtp_chat_resp(LMTP_STATE *state)
|
|||||||
static LMTP_RESP rdata;
|
static LMTP_RESP rdata;
|
||||||
char *cp;
|
char *cp;
|
||||||
int last_char;
|
int last_char;
|
||||||
|
int three_digs = 0;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Initialize the response data buffer.
|
* Initialize the response data buffer.
|
||||||
@@ -215,7 +216,7 @@ LMTP_RESP *lmtp_chat_resp(LMTP_STATE *state)
|
|||||||
*/
|
*/
|
||||||
for (cp = STR(state->buffer); *cp && ISDIGIT(*cp); cp++)
|
for (cp = STR(state->buffer); *cp && ISDIGIT(*cp); cp++)
|
||||||
/* void */ ;
|
/* void */ ;
|
||||||
if (cp - STR(state->buffer) == 3) {
|
if ((three_digs = (cp - STR(state->buffer) == 3)) != 0) {
|
||||||
if (*cp == '-')
|
if (*cp == '-')
|
||||||
continue;
|
continue;
|
||||||
if (*cp == ' ' || *cp == 0)
|
if (*cp == ' ' || *cp == 0)
|
||||||
@@ -223,7 +224,10 @@ LMTP_RESP *lmtp_chat_resp(LMTP_STATE *state)
|
|||||||
}
|
}
|
||||||
state->error_mask |= MAIL_ERROR_PROTOCOL;
|
state->error_mask |= MAIL_ERROR_PROTOCOL;
|
||||||
}
|
}
|
||||||
rdata.code = atoi(STR(state->buffer));
|
if (three_digs != 0)
|
||||||
|
rdata.code = atoi(STR(state->buffer));
|
||||||
|
else
|
||||||
|
rdata.code = 0;
|
||||||
VSTRING_TERMINATE(rdata.buf);
|
VSTRING_TERMINATE(rdata.buf);
|
||||||
rdata.str = STR(rdata.buf);
|
rdata.str = STR(rdata.buf);
|
||||||
return (&rdata);
|
return (&rdata);
|
||||||
|
@@ -377,7 +377,7 @@ void lmtp_sasl_start(LMTP_STATE *state, const char *sasl_opts_name,
|
|||||||
*/
|
*/
|
||||||
memset(&sec_props, 0L, sizeof(sec_props));
|
memset(&sec_props, 0L, sizeof(sec_props));
|
||||||
sec_props.min_ssf = 0;
|
sec_props.min_ssf = 0;
|
||||||
sec_props.max_ssf = 1; /* don't allow real SASL
|
sec_props.max_ssf = 0; /* don't allow real SASL
|
||||||
* security layer */
|
* security layer */
|
||||||
sec_props.security_flags = name_mask(sasl_opts_name, lmtp_sasl_sec_mask,
|
sec_props.security_flags = name_mask(sasl_opts_name, lmtp_sasl_sec_mask,
|
||||||
sasl_opts_val);
|
sasl_opts_val);
|
||||||
|
@@ -313,6 +313,8 @@ int lmtp_stream_except(LMTP_STATE *state, int code, char *description)
|
|||||||
request->arrival_time,
|
request->arrival_time,
|
||||||
"%s", vstring_str(why));
|
"%s", vstring_str(why));
|
||||||
}
|
}
|
||||||
|
if (request->hop_status == 0)
|
||||||
|
request->hop_status = mystrdup(vstring_str(why));
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Cleanup.
|
* Cleanup.
|
||||||
|
@@ -285,7 +285,7 @@
|
|||||||
/* of the "owner-aliasname" alias.
|
/* of the "owner-aliasname" alias.
|
||||||
/* .IP "\fBowner_request_special (yes)\fR"
|
/* .IP "\fBowner_request_special (yes)\fR"
|
||||||
/* Give special treatment to owner-listname and listname-request
|
/* Give special treatment to owner-listname and listname-request
|
||||||
/* address localparts: don't don't split such addresses when the
|
/* 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.
|
||||||
@@ -713,7 +713,7 @@ static void pre_init(char *unused_name, char **unused_argv)
|
|||||||
* file.
|
* file.
|
||||||
*/
|
*/
|
||||||
if (var_mailbox_limit) {
|
if (var_mailbox_limit) {
|
||||||
if (var_mailbox_limit < var_message_limit)
|
if (var_mailbox_limit < var_message_limit || var_message_limit == 0)
|
||||||
msg_fatal("main.cf configuration error: %s is smaller than %s",
|
msg_fatal("main.cf configuration error: %s is smaller than %s",
|
||||||
VAR_MAILBOX_LIMIT, VAR_MESSAGE_LIMIT);
|
VAR_MAILBOX_LIMIT, VAR_MESSAGE_LIMIT);
|
||||||
set_file_limit(var_mailbox_limit);
|
set_file_limit(var_mailbox_limit);
|
||||||
|
@@ -158,10 +158,7 @@ static void postdrop_cleanup(void)
|
|||||||
* This is the fatal error handler. Don't try to do anything fancy.
|
* This is the fatal error handler. Don't try to do anything fancy.
|
||||||
*/
|
*/
|
||||||
if (postdrop_path) {
|
if (postdrop_path) {
|
||||||
if (remove(postdrop_path))
|
(void) remove(postdrop_path);
|
||||||
msg_warn("uid=%ld: remove %s: %m", (long) getuid(), postdrop_path);
|
|
||||||
else if (msg_verbose)
|
|
||||||
msg_info("remove %s", postdrop_path);
|
|
||||||
postdrop_path = 0;
|
postdrop_path = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -174,12 +171,12 @@ static void postdrop_sig(int sig)
|
|||||||
/*
|
/*
|
||||||
* Assume atomic signal() updates, even when emulated with sigaction().
|
* Assume atomic signal() updates, even when emulated with sigaction().
|
||||||
*/
|
*/
|
||||||
if (signal(SIGHUP, SIG_IGN) != SIG_IGN
|
if (signal(SIGINT, SIG_IGN) != SIG_IGN) {
|
||||||
&& signal(SIGINT, SIG_IGN) != SIG_IGN
|
(void) signal(SIGQUIT, SIG_IGN);
|
||||||
&& signal(SIGQUIT, SIG_IGN) != SIG_IGN
|
(void) signal(SIGTERM, SIG_IGN);
|
||||||
&& signal(SIGTERM, SIG_IGN) != SIG_IGN) {
|
(void) signal(SIGHUP, SIG_IGN);
|
||||||
postdrop_cleanup();
|
postdrop_cleanup();
|
||||||
exit(sig);
|
_exit(sig);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -203,6 +200,7 @@ int main(int argc, char **argv)
|
|||||||
const char *error_text;
|
const char *error_text;
|
||||||
char *attr_name;
|
char *attr_name;
|
||||||
char *attr_value;
|
char *attr_value;
|
||||||
|
char *junk;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Be consistent with file permissions.
|
* Be consistent with file permissions.
|
||||||
@@ -286,11 +284,11 @@ int main(int argc, char **argv)
|
|||||||
signal(SIGPIPE, SIG_IGN);
|
signal(SIGPIPE, SIG_IGN);
|
||||||
signal(SIGXFSZ, SIG_IGN);
|
signal(SIGXFSZ, SIG_IGN);
|
||||||
|
|
||||||
if (signal(SIGHUP, SIG_IGN) == SIG_DFL)
|
|
||||||
signal(SIGHUP, postdrop_sig);
|
|
||||||
signal(SIGINT, postdrop_sig);
|
signal(SIGINT, postdrop_sig);
|
||||||
signal(SIGQUIT, postdrop_sig);
|
signal(SIGQUIT, postdrop_sig);
|
||||||
signal(SIGTERM, postdrop_sig);
|
signal(SIGTERM, postdrop_sig);
|
||||||
|
if (signal(SIGHUP, SIG_IGN) == SIG_DFL)
|
||||||
|
signal(SIGHUP, postdrop_sig);
|
||||||
msg_cleanup(postdrop_cleanup);
|
msg_cleanup(postdrop_cleanup);
|
||||||
|
|
||||||
/* End of initializations. */
|
/* End of initializations. */
|
||||||
@@ -389,8 +387,9 @@ int main(int argc, char **argv)
|
|||||||
* will not be deleted after we have taken responsibility for delivery.
|
* will not be deleted after we have taken responsibility for delivery.
|
||||||
*/
|
*/
|
||||||
if (postdrop_path) {
|
if (postdrop_path) {
|
||||||
myfree(postdrop_path);
|
junk = postdrop_path;
|
||||||
postdrop_path = 0;
|
postdrop_path = 0;
|
||||||
|
myfree(junk);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@@ -455,6 +455,7 @@ static void output_header(void *context, int header_class,
|
|||||||
char *start;
|
char *start;
|
||||||
char *line;
|
char *line;
|
||||||
char *next_line;
|
char *next_line;
|
||||||
|
int len;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Parse the header line, and save copies of recipient addresses in the
|
* Parse the header line, and save copies of recipient addresses in the
|
||||||
@@ -483,12 +484,24 @@ static void output_header(void *context, int header_class,
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* Pipe the unmodified message header through the header line folding
|
* Pipe the unmodified message header through the header line folding
|
||||||
* routine.
|
* routine, and ensure that long lines are chopped appropriately.
|
||||||
*/
|
*/
|
||||||
for (line = start = STR(buf); line; line = next_line) {
|
for (line = start = STR(buf); line; line = next_line) {
|
||||||
next_line = split_at(line, '\n');
|
next_line = split_at(line, '\n');
|
||||||
output_text(context, REC_TYPE_NORM, line, next_line ?
|
len = next_line ? next_line - line - 1 : strlen(line);
|
||||||
next_line - line - 1 : strlen(line), offset);
|
do {
|
||||||
|
if (len > var_line_limit) {
|
||||||
|
output_text(context, REC_TYPE_CONT, line, var_line_limit, offset);
|
||||||
|
line += var_line_limit;
|
||||||
|
len -= var_line_limit;
|
||||||
|
offset += var_line_limit;
|
||||||
|
} else {
|
||||||
|
output_text(context, REC_TYPE_NORM, line, len, offset);
|
||||||
|
offset += len;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} while (len > 0);
|
||||||
|
offset += 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -621,6 +634,8 @@ static void enqueue(const int flags, const char *encoding, const char *sender,
|
|||||||
*/
|
*/
|
||||||
rec_fputs(dst, REC_TYPE_MESG, "");
|
rec_fputs(dst, REC_TYPE_MESG, "");
|
||||||
if (DEL_REQ_TRACE_ONLY(flags) != 0) {
|
if (DEL_REQ_TRACE_ONLY(flags) != 0) {
|
||||||
|
if (flags & SM_FLAG_XRCPT)
|
||||||
|
msg_fatal_status(EX_USAGE, "-t option cannot be used with -bv");
|
||||||
rec_fprintf(dst, REC_TYPE_NORM, "Subject: probe");
|
rec_fprintf(dst, REC_TYPE_NORM, "Subject: probe");
|
||||||
if (recipients) {
|
if (recipients) {
|
||||||
rec_fprintf(dst, REC_TYPE_NORM, "To:");
|
rec_fprintf(dst, REC_TYPE_NORM, "To:");
|
||||||
|
@@ -181,6 +181,7 @@ SMTP_RESP *smtp_chat_resp(SMTP_STATE *state)
|
|||||||
static SMTP_RESP rdata;
|
static SMTP_RESP rdata;
|
||||||
char *cp;
|
char *cp;
|
||||||
int last_char;
|
int last_char;
|
||||||
|
int three_digs = 0;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Initialize the response data buffer.
|
* Initialize the response data buffer.
|
||||||
@@ -221,7 +222,7 @@ SMTP_RESP *smtp_chat_resp(SMTP_STATE *state)
|
|||||||
*/
|
*/
|
||||||
for (cp = STR(state->buffer); *cp && ISDIGIT(*cp); cp++)
|
for (cp = STR(state->buffer); *cp && ISDIGIT(*cp); cp++)
|
||||||
/* void */ ;
|
/* void */ ;
|
||||||
if (cp - STR(state->buffer) == 3) {
|
if ((three_digs = (cp - STR(state->buffer) == 3)) != 0) {
|
||||||
if (*cp == '-')
|
if (*cp == '-')
|
||||||
continue;
|
continue;
|
||||||
if (*cp == ' ' || *cp == 0)
|
if (*cp == ' ' || *cp == 0)
|
||||||
@@ -229,7 +230,10 @@ SMTP_RESP *smtp_chat_resp(SMTP_STATE *state)
|
|||||||
}
|
}
|
||||||
state->error_mask |= MAIL_ERROR_PROTOCOL;
|
state->error_mask |= MAIL_ERROR_PROTOCOL;
|
||||||
}
|
}
|
||||||
rdata.code = atoi(STR(state->buffer));
|
if (three_digs != 0)
|
||||||
|
rdata.code = atoi(STR(state->buffer));
|
||||||
|
else
|
||||||
|
rdata.code = 0;
|
||||||
VSTRING_TERMINATE(rdata.buf);
|
VSTRING_TERMINATE(rdata.buf);
|
||||||
rdata.str = STR(rdata.buf);
|
rdata.str = STR(rdata.buf);
|
||||||
return (&rdata);
|
return (&rdata);
|
||||||
|
@@ -377,7 +377,7 @@ void smtp_sasl_start(SMTP_STATE *state, const char *sasl_opts_name,
|
|||||||
*/
|
*/
|
||||||
memset(&sec_props, 0L, sizeof(sec_props));
|
memset(&sec_props, 0L, sizeof(sec_props));
|
||||||
sec_props.min_ssf = 0;
|
sec_props.min_ssf = 0;
|
||||||
sec_props.max_ssf = 1; /* don't allow real SASL
|
sec_props.max_ssf = 0; /* don't allow real SASL
|
||||||
* security layer */
|
* security layer */
|
||||||
sec_props.security_flags = name_mask(sasl_opts_name, smtp_sasl_sec_mask,
|
sec_props.security_flags = name_mask(sasl_opts_name, smtp_sasl_sec_mask,
|
||||||
sasl_opts_val);
|
sasl_opts_val);
|
||||||
|
@@ -402,6 +402,9 @@ int smtp_stream_except(SMTP_STATE *state, int code, char *description)
|
|||||||
"%s", vstring_str(why));
|
"%s", vstring_str(why));
|
||||||
SMTP_RCPT_DROP(state, rcpt);
|
SMTP_RCPT_DROP(state, rcpt);
|
||||||
}
|
}
|
||||||
|
/* XXX This assumes no fall-back relay. */
|
||||||
|
if (request->hop_status == 0)
|
||||||
|
request->hop_status = mystrdup(vstring_str(why));
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@@ -288,7 +288,7 @@ void smtpd_sasl_connect(SMTPD_STATE *state, const char *sasl_opts_name,
|
|||||||
*/
|
*/
|
||||||
memset(&sec_props, 0, sizeof(sec_props));
|
memset(&sec_props, 0, sizeof(sec_props));
|
||||||
sec_props.min_ssf = 0;
|
sec_props.min_ssf = 0;
|
||||||
sec_props.max_ssf = 1; /* don't allow real SASL
|
sec_props.max_ssf = 0; /* don't allow real SASL
|
||||||
* security layer */
|
* security layer */
|
||||||
sec_props.security_flags = name_mask(sasl_opts_name, smtpd_sasl_mask,
|
sec_props.security_flags = name_mask(sasl_opts_name, smtpd_sasl_mask,
|
||||||
sasl_opts_val);
|
sasl_opts_val);
|
||||||
|
@@ -446,7 +446,7 @@ static void pre_init(char *unused_name, char **unused_argv)
|
|||||||
* file.
|
* file.
|
||||||
*/
|
*/
|
||||||
if (var_virt_mailbox_limit) {
|
if (var_virt_mailbox_limit) {
|
||||||
if (var_virt_mailbox_limit < var_message_limit)
|
if (var_virt_mailbox_limit < var_message_limit || var_message_limit == 0)
|
||||||
msg_fatal("main.cf configuration error: %s is smaller than %s",
|
msg_fatal("main.cf configuration error: %s is smaller than %s",
|
||||||
VAR_VIRT_MAILBOX_LIMIT, VAR_MESSAGE_LIMIT);
|
VAR_VIRT_MAILBOX_LIMIT, VAR_MESSAGE_LIMIT);
|
||||||
set_file_limit(var_virt_mailbox_limit);
|
set_file_limit(var_virt_mailbox_limit);
|
||||||
|
Reference in New Issue
Block a user