/usr/spool/mail yes (compile time option)
/var/mail yes (compile time option)
/var/spool/mail yes (compile time option)
+8bitmime yes (including 8bit to quoted-printable conversion)
:include: yes (mail to /file and |command is off by default)
aliases yes (can enable/disable mail to /file or |command)
bare newlines yes (but will send CRLF)
dsn not yet (bounces have DSN form)
errors-to: yes
esmtp yes
-etrn support yes (uses per-destination log or flushes entire queue)
+etrn support yes (per-destination log for authorized destinations only)
fcntl locking yes (runtime configurable)
flock locking yes (runtime configurable)
home mailbox yes
maildir yes (in home, system mailspool, /file/name/ alias)
mailertable yes (it's called transport)
mailq yes
-majordomo yes (edit approve script to delete /delivered-to/i)
+majordomo yes (edit approve script to delete /^delivered-to:/i)
+mime yes (including 8bit to quoted-printable conversion)
mime conversion not yet; postfix uses just-send-eight
mysql tables yes (contributed)
netinfo tables yes (contributed)
Patch by Sebastian Schaffert @ wastl.net. File:
global/deliver_pass.c.
+20020604
+
+ Workaround: Solaris non-blocking read() can fail on a socket
+ with unread data according to ioctl FIONREAD. Incredible.
+ Diagnosis by Max Pashkov. File: smtp/smtp-sink.c.
+
+ Weirdstuff: sender-based routing. This will become more
+ useful once per-address transport map entries are done.
+ File: src/qmgr/qmgr_message.c.
+
+20020605
+
+ Safety: header_address_token_limit limits the amount of
+ memory and CPU that we're willing to spend while parsing
+ addresses in message headers. The limit is expressed as a
+ number of tokens. File: global/tok822_parse.c
+
Open problems:
Medium: old maildrop files are no longer readable by the
a significant barrier against intrusion. The barrier is not
impenetrable, but every little bit helps.
-With the exception of the Postfix local delivery and `pipe' daemons,
+With the exception of the Postfix daemons that deliver mail locally,
every Postfix daemon can run chrooted.
Sites with high security requirements should consider to chroot
-o local_recipient_maps=
-o virtual_maps=
-o virtual_mailbox_maps=
- -o cleanup_service=cleanup2
+ -o cleanup_service_name=cleanup2
-o mynetworks=127.0.0.0/8
-o mynetworks_style=host
-o smtpd_restriction_classes=
#
# Unprivileged: whether the service runs with root privileges or as
# the owner of the Postfix system (the owner name is controlled by the
-# mail_owner configuration variable in the main.cf file).
+# mail_owner configuration variable in the main.cf file). Only the
+# pipe, virtual and local delivery daemons require privileges.
#
# Chroot: whether or not the service runs chrooted to the mail queue
# directory (pathname is controlled by the queue_directory configuration
#
# Interfaces to non-Postfix software. Be sure to examine the manual
# pages of the non-Postfix software to find out what options it wants.
-# The Cyrus deliver program has changed incompatibly.
+# The Cyrus deliver program has changed incompatibly, multiple times.
#
-cyrus unix - n n - - pipe
+old-cyrus unix - n n - - pipe
flags=R user=cyrus argv=/cyrus/bin/deliver -e -m ${extension} ${user}
+cyrus unix - n n - - pipe
+ user=cyrus argv=/cyrus/bin/deliver -e -r ${recipient} -m ${extension} ${user}
uucp unix - n n - - pipe
flags=Fqhu user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient)
ifmail unix - n n - - pipe
# matching is case insensitive.
#
# m (default: off)
-# Toggles the PCRE_MULTILINE flag. When the flag is
+# Toggles the PCRE_MULTILINE flag. When this flag is
# on, the ^ and $ metacharacters match immediately
# after and immediately before a newline character,
# respectively, in addition to matching at the start
# and end of the subject string.
#
# s (default: on)
-# Toggle the PCRE_DOTALL flag. When the flag is on,
+# Toggles the PCRE_DOTALL flag. When this flag is on,
# the . metacharacter matches the newline character.
# With Postfix versions prior to 20020528, The flag
# is off by default, which is inconvenient for multi-
# line message header matching.
#
# x (default: off)
-# Toggles the pcre extended flag. When the flag is
+# Toggles the pcre extended flag. When this flag is
# on, whitespace in the pattern (other than in a
# character class) and characters between a # outside
# a character class and the next newline character
#
# A (default: off)
# Toggles the PCRE_ANCHORED flag. When this flag is
-# set, the pattern is forced to be "anchored", that
+# on, the pattern is forced to be "anchored", that
# is, it is constrained to match only at the start of
# the string which is being searched (the "subject
# string"). This effect can also be achieved by
#
# E (default: off)
# Toggles the PCRE_DOLLAR_ENDONLY flag. When this
-# flag is set, a $ metacharacter in the pattern
+# flag is on, a $ metacharacter in the pattern
# matches only at the end of the subject string.
# Without this flag, a dollar also matches immedi-
# ately before the final character if it is a newline
#
# U (default: off)
# Toggles the ungreedy matching flag. When this flag
-# is set, the pattern matching engine inverts the
+# is on, the pattern matching engine inverts the
# "greediness" of the quantifiers so that they are
# not greedy by default, but become greedy if fol-
# lowed by "?". This flag can also set by a (?U)
# modifier within the pattern.
#
# X (default: off)
-# Toggles the PCRE_EXTRA flag. When this flag is
-# set, any backslash in a pattern that is followed by
-# a letter that has no special meaning causes an
-# error, thus reserving these combinations for future
-# expansion.
+# Toggles the PCRE_EXTRA flag. When this flag is on,
+# any backslash in a pattern that is followed by a
+# letter that has no special meaning causes an error,
+# thus reserving these combinations for future expan-
+# sion.
#
# Each pattern is applied to the entire lookup key string.
# Depending on the application, that string is an entire
fork_delay = 1s
# The header_size_limit parameter limits the amount of memory in
-# bytes used for processing a message header. If a header is larger,
-# the remainder of the entire message is treated as message body.
+# bytes used for storing a message header. If a header is larger,
+# the remainder of the header is descarded.
#
header_size_limit = 102400
+# The header_address_token_limit limits the amount of memory and CPU
+# that Postfix will spend while rewriting addresses in message headers.
+# The limit is expressed as a token count. Tokens beyond the limit are
+# discarded.
+#
+header_address_token_limit = 10240
+
# The line_length_limit parameter limits the amount of memory in
# bytes used for handling input lines. Longer lines are chopped up
# into pieces and reconstructed upon delivery.
# response. This prevents naive clients from going into an error -
# disconnect - connect - error loop.
#
-smtpd_error_sleep_time = 5
+smtpd_error_sleep_time = 1s
# The smtpd_soft_error_limit parameter specifies an error count lower
# limit. When an SMTP client has made this number of errors within
# limit. The SMTP server disconnects after an SMTP client makes this
# number of errors within a session.
#
-smtpd_hard_error_limit = 100
+smtpd_hard_error_limit = 20
#
# UCE RESTRICTIONS
matching is case insensitive.
<b>m</b> (default: off)
- Toggles the PCRE_MULTILINE flag. When the flag is
+ Toggles the PCRE_MULTILINE flag. When this flag is
on, the <b>^</b> and $ metacharacters match immediately
after and immediately before a newline character,
respectively, in addition to matching at the start
and end of the subject string.
<b>s</b> (default: on)
- Toggle the PCRE_DOTALL flag. When the flag is on,
+ Toggles the PCRE_DOTALL flag. When this flag is on,
the <b>.</b> metacharacter matches the newline character.
With Postfix versions prior to 20020528, The flag
is off by default, which is inconvenient for multi-
line message header matching.
<b>x</b> (default: off)
- Toggles the pcre extended flag. When the flag is
+ Toggles the pcre extended flag. When this flag is
on, whitespace in the pattern (other than in a
character class) and characters between a <b>#</b> outside
a character class and the next newline character
<b>A</b> (default: off)
Toggles the PCRE_ANCHORED flag. When this flag is
- set, the pattern is forced to be "anchored", that
+ on, the pattern is forced to be "anchored", that
is, it is constrained to match only at the start of
the string which is being searched (the "subject
string"). This effect can also be achieved by
<b>E</b> (default: off)
Toggles the PCRE_DOLLAR_ENDONLY flag. When this
- flag is set, a <b>$</b> metacharacter in the pattern
+ flag is on, a <b>$</b> metacharacter in the pattern
matches only at the end of the subject string.
Without this flag, a dollar also matches immedi-
ately before the final character if it is a newline
<b>U</b> (default: off)
Toggles the ungreedy matching flag. When this flag
- is set, the pattern matching engine inverts the
+ is on, the pattern matching engine inverts the
"greediness" of the quantifiers so that they are
not greedy by default, but become greedy if fol-
lowed by "?". This flag can also set by a (?U)
modifier within the pattern.
<b>X</b> (default: off)
- Toggles the PCRE_EXTRA flag. When this flag is
- set, any backslash in a pattern that is followed by
- a letter that has no special meaning causes an
- error, thus reserving these combinations for future
- expansion.
+ Toggles the PCRE_EXTRA flag. When this flag is on,
+ any backslash in a pattern that is followed by a
+ letter that has no special meaning causes an error,
+ thus reserving these combinations for future expan-
+ sion.
Each pattern is applied to the entire lookup key string.
Depending on the application, that string is an entire
Limit the time for delivery to external command,
for delivery via the named <b>transport</b>. The default
limit is taken from the <b>command</b><i>_</i><b>time</b><i>_</i><b>limit</b> parame-
- ter. The limit is enforced by the Postfix queue
- manager.
+ ter. The limit is enforced by the pipe delivery
+ agent.
<b>SEE</b> <b>ALSO</b>
<a href="bounce.8.html">bounce(8)</a> non-delivery status reports
is available only on systems with support
for Berkeley DB databases.
- <b>ldap</b> Perform lookups using the LDAP protocol.
+ <b>ldap</b> (read-only)
+ Perform lookups using the LDAP protocol.
This is described in an LDAP_README file.
- <b>pcre</b> A lookup table based on Perl Compatible Reg-
- ular Expressions. The file format is
+ <b>mysql</b> (read-only)
+ Perform lookups using the MYSQL protocol.
+ This is described in a MYSQL_README file.
+
+ <b>pcre</b> (read-only)
+ A lookup table based on Perl Compatible Reg-
+ ular Expressions. The file format is
described in <a href="pcre_table.5.html"><b>pcre</b><i>_</i><b>table</b>(5)</a>.
- <b>regexp</b> A lookup table based on regular expressions.
- The file format is described in <b>reg-</b>
- <b>exp</b><i>_</i><b>table</b>(5).
+ <b>regexp</b> (read-only)
+ A lookup table based on regular expressions.
+ The file format is described in <a href="regexp_table.5.html"><b>reg-</b>
+ <b>exp</b><i>_</i><b>table</b>(5)</a>.
- <b>static</b> A table that always returns the same result.
- For example, <b>static:foobar</b> always returns
- the string <b>foobar</b>.
+ <b>static</b> (read-only)
+ A table that always returns its name as
+ lookup result. For example, <b>static:foobar</b>
+ always returns the string <b>foobar</b> as lookup
+ result.
- <b>unix</b> A limited way to query the UNIX authentica-
+ <b>unix</b> (read-only)
+ A limited way to query the UNIX authentica-
tion database. The following tables are
implemented:
<b>alternate</b><i>_</i><b>config</b><i>_</i><b>directories</b> configuration parame-
ter value.
- Only the super-user is allowed to specify arbitrary
+ Only the superuser is allowed to specify arbitrary
directory names.
<b>FILES</b>
<b>postfix</b> [<b>-c</b> <i>config_dir</i>] [<b>-D</b>] [<b>-v</b>] <i>command</i>
<b>DESCRIPTION</b>
- This command is reserved for the super-user. To submit
+ This command is reserved for the superuser. To submit
mail, use the Postfix <b>sendmail</b> command.
The <b>postfix</b> command controls the operation of the Postfix
<b>alternate</b><i>_</i><b>config</b><i>_</i><b>directories</b> configuration parame-
ter value.
- Only the super-user is allowed to specify arbitrary
+ Only the superuser is allowed to specify arbitrary
directory names.
<b>FILES</b>
<html> <head> </head> <body> <pre>
-
POSTSUPER(1) POSTSUPER(1)
<b>NAME</b>
<b>DESCRIPTION</b>
The <b>postsuper</b> command does maintenance jobs on the Postfix
- queue. Use of the command is restricted to the super-user.
+ queue. Use of the command is restricted to the superuser.
By default, <b>postsuper</b> performs the operations requested
with the <b>-s</b> and <b>-p</b> command-line options on all Postfix
P.O. Box 704
Yorktown Heights, NY 10598, USA
- 1
-
+ POSTSUPER(1)
</pre> </body> </html>
<a name="#smtpd_error_sleep_time">
-<dt> <b>smtpd_error_sleep_time</b> (default: 5 seconds) <dd> When
+<dt> <b>smtpd_error_sleep_time</b> (default: 1 second) <dd> When
the per-session error count is small, the SMTP server pauses only
when reporting a problem to a client. The purpose is to prevent
naive clients from going into a fast <i>connect-error-disconnect</i>
<a name="#smtpd_hard_error_limit">
-<dt> <b>smtpd_hard_error_limit</b> (default: 100) <dd> When
+<dt> <b>smtpd_hard_error_limit</b> (default: 20) <dd> When
the per-session error count exceeds this value, the SMTP server
disconnects.
<dd> How much text may be carried in a multi-line message header.
Header text that does not fit in <b>$header_size_limit</b> bytes
-overflows into the message body. This limit is enforced by the <a
+is discarded. This limit is enforced by the <a
href="cleanup.8.html"> cleanup</a> header rewriting code.
<p>
+<dt> <b>header_address_token_limit</b> (default: 10240 tokens)
+
+<dd> Limit on the amount of memory and CPU that Postfix will use for
+rewriting addresses in message headers. The limit is expressed as
+a number of tokens. Tokens text that do not fit are discarded.
+This limit is enforced by the <a href="cleanup.8.html"> cleanup</a>
+header rewriting code.
+
+<p>
+
<dt> <b>extract_recipient_limit</b> (default: 10240 recipients)
<dd> How many recipients Postfix will extract from message headers
mand.
The <b>showq</b> daemon can also be run in stand-alone mode by
- the super-user. This mode of operation is used to emulate
+ the superuser. This mode of operation is used to emulate
the `mailq' command while the Postfix mail system is down.
<b>SECURITY</b>
An indexed file type based on hashing.
This is available only on systems with support for Berkeley DB
databases.
-.IP \fBldap\fR
+.IP "\fBldap\fR (read-only)"
Perform lookups using the LDAP protocol. This is described
in an LDAP_README file.
-.IP \fBpcre\fR
+.IP "\fBmysql\fR (read-only)"
+Perform lookups using the MYSQL protocol. This is described
+in a MYSQL_README file.
+.IP "\fBpcre\fR (read-only)"
A lookup table based on Perl Compatible Regular Expressions. The
file format is described in \fBpcre_table\fR(5).
-.IP \fBregexp\fR
+.IP "\fBregexp\fR (read-only)"
A lookup table based on regular expressions. The file format is
described in \fBregexp_table\fR(5).
-.IP \fBstatic\fR
-A table that always returns the same result. For example,
-\fBstatic:foobar\fR always returns the string \fBfoobar\fR.
-.IP \fBunix\fR
+.IP "\fBstatic\fR (read-only)"
+A table that always returns its name as lookup result. For example,
+\fBstatic:foobar\fR always returns the string \fBfoobar\fR as lookup
+result.
+.IP "\fBunix\fR (read-only)"
A limited way to query the UNIX authentication database. The
following tables are implemented:
.RS
standard \fBmain.cf\fR file, in the \fBalternate_config_directories\fR
configuration parameter value.
-Only the super-user is allowed to specify arbitrary directory names.
+Only the superuser is allowed to specify arbitrary directory names.
.SH FILES
.na
.nf
.SH DESCRIPTION
.ad
.fi
-This command is reserved for the super-user. To submit mail,
+This command is reserved for the superuser. To submit mail,
use the Postfix \fBsendmail\fR command.
The \fBpostfix\fR command controls the operation of the Postfix
standard \fBmain.cf\fR file, in the \fBalternate_config_directories\fR
configuration parameter value.
-Only the super-user is allowed to specify arbitrary directory names.
+Only the superuser is allowed to specify arbitrary directory names.
.SH FILES
.na
.nf
.ad
.fi
The \fBpostsuper\fR command does maintenance jobs on the Postfix
-queue. Use of the command is restricted to the super-user.
+queue. Use of the command is restricted to the superuser.
By default, \fBpostsuper\fR performs the operations requested with the
\fB-s\fR and \fB-p\fR command-line options on all Postfix queue
Toggles the case sensitivity flag. By default, matching is case
insensitive.
.IP "\fBm\fR (default: off)"
-Toggles the PCRE_MULTILINE flag. When the flag is on, the \fB^\fR
+Toggles the PCRE_MULTILINE flag. When this flag is on, the \fB^\fR
and \fb$\fR metacharacters match immediately after and immediately
before a newline character, respectively, in addition to
matching at the start and end of the subject string.
.IP "\fBs\fR (default: on)"
-Toggle the PCRE_DOTALL flag. When the flag is on, the \fB.\fR
+Toggles the PCRE_DOTALL flag. When this flag is on, the \fB.\fR
metacharacter matches the newline character. With
Postfix versions prior to 20020528, The flag is off by
default, which is inconvenient for multi-line message header
matching.
.IP "\fBx\fR (default: off)"
-Toggles the pcre extended flag. When the flag is on, whitespace
+Toggles the pcre extended flag. When this flag is on, whitespace
in the pattern (other than in a character class) and
characters between a \fB#\fR outside a character class and
the next newline character are ignored. An escaping backslash
can be used to include a whitespace or \fB#\fR character
as part of the pattern.
.IP "\fBA\fR (default: off)"
-Toggles the PCRE_ANCHORED flag. When this flag is set,
+Toggles the PCRE_ANCHORED flag. When this flag is on,
the pattern is forced to be "anchored", that is, it is
constrained to match only at the start of the string which
is being searched (the "subject string"). This effect can
also be achieved by appropriate constructs in the pattern
itself.
.IP "\fBE\fR (default: off)"
-Toggles the PCRE_DOLLAR_ENDONLY flag. When this flag is set,
+Toggles the PCRE_DOLLAR_ENDONLY flag. When this flag is on,
a \fB$\fR metacharacter in the pattern matches only at the
end of the subject string. Without this flag, a dollar also
matches immediately before the final character if it is a
characters). This flag is ignored if PCRE_MULTILINE
flag is set.
.IP "\fBU\fR (default: off)"
-Toggles the ungreedy matching flag. When this flag is set,
+Toggles the ungreedy matching flag. When this flag is on,
the pattern matching engine inverts the "greediness" of
the quantifiers so that they are not greedy by default,
but become greedy if followed by "?". This flag can also
set by a (?U) modifier within the pattern.
.IP "\fBX\fR (default: off)"
Toggles the PCRE_EXTRA flag.
-When this flag is set, any backslash in a pattern that is
+When this flag is on, any backslash in a pattern that is
followed by a letter that has no special meaning causes an
error, thus reserving these combinations for future expansion.
.PP
Limit the time for delivery to external command, for delivery via
the named \fBtransport\fR. The default limit is taken from the
\fBcommand_time_limit\fR parameter.
-The limit is enforced by the Postfix queue manager.
+The limit is enforced by the pipe delivery agent.
.SH SEE ALSO
.na
.nf
It is the program that emulates the sendmail `mailq' command.
The \fBshowq\fR daemon can also be run in stand-alone mode
-by the super-user. This mode of operation is used to emulate
+by the superuser. This mode of operation is used to emulate
the `mailq' command while the Postfix mail system is down.
.SH SECURITY
.na
s/[<bB>]*canonical[</bB>]*(5)/<a href="canonical.5.html">&<\/a>/
s/[<bB>]*etrn[</bB>]*(5)/<a href="etrn.5.html">&<\/a>/
s/[<bB>]*pcre[</bBiI>]*_[</iIbB>]*table[</bB>]*(5)/<a href="pcre_table.5.html">&<\/a>/
- s/[<bB>]*regexp[</bBiI>]*_[</iIbB>]*table[</bB>]*(5)/<a href="regexp_table.5.html">&<\/a>/
+ s/[<bB>]*reg[-</bB>]*\n*[ <bB>]*exp[</bBiI>]*_[</iIbB>]*table[</bB>]*(5)/<a href="regexp_table.5.html">&<\/a>/
s/[<bB>]*relocated[</bB>]*(5)/<a href="relocated.5.html">&<\/a>/
s/[<bB>]*trans[-</bB>]*\n*[ <bB>]*port[</bB>]*(5)/<a href="transport.5.html">&<\/a>/
s/[<bB>]*virtual[</bB>]*(5)/<a href="virtual.5.html">&<\/a>/
# Toggles the case sensitivity flag. By default, matching is case
# insensitive.
# .IP "\fBm\fR (default: off)"
-# Toggles the PCRE_MULTILINE flag. When the flag is on, the \fB^\fR
+# Toggles the PCRE_MULTILINE flag. When this flag is on, the \fB^\fR
# and \fb$\fR metacharacters match immediately after and immediately
# before a newline character, respectively, in addition to
# matching at the start and end of the subject string.
# .IP "\fBs\fR (default: on)"
-# Toggle the PCRE_DOTALL flag. When the flag is on, the \fB.\fR
+# Toggles the PCRE_DOTALL flag. When this flag is on, the \fB.\fR
# metacharacter matches the newline character. With
# Postfix versions prior to 20020528, The flag is off by
# default, which is inconvenient for multi-line message header
# matching.
# .IP "\fBx\fR (default: off)"
-# Toggles the pcre extended flag. When the flag is on, whitespace
+# Toggles the pcre extended flag. When this flag is on, whitespace
# in the pattern (other than in a character class) and
# characters between a \fB#\fR outside a character class and
# the next newline character are ignored. An escaping backslash
# can be used to include a whitespace or \fB#\fR character
# as part of the pattern.
# .IP "\fBA\fR (default: off)"
-# Toggles the PCRE_ANCHORED flag. When this flag is set,
+# Toggles the PCRE_ANCHORED flag. When this flag is on,
# the pattern is forced to be "anchored", that is, it is
# constrained to match only at the start of the string which
# is being searched (the "subject string"). This effect can
# also be achieved by appropriate constructs in the pattern
# itself.
# .IP "\fBE\fR (default: off)"
-# Toggles the PCRE_DOLLAR_ENDONLY flag. When this flag is set,
+# Toggles the PCRE_DOLLAR_ENDONLY flag. When this flag is on,
# a \fB$\fR metacharacter in the pattern matches only at the
# end of the subject string. Without this flag, a dollar also
# matches immediately before the final character if it is a
# characters). This flag is ignored if PCRE_MULTILINE
# flag is set.
# .IP "\fBU\fR (default: off)"
-# Toggles the ungreedy matching flag. When this flag is set,
+# Toggles the ungreedy matching flag. When this flag is on,
# the pattern matching engine inverts the "greediness" of
# the quantifiers so that they are not greedy by default,
# but become greedy if followed by "?". This flag can also
# set by a (?U) modifier within the pattern.
# .IP "\fBX\fR (default: off)"
# Toggles the PCRE_EXTRA flag.
-# When this flag is set, any backslash in a pattern that is
+# When this flag is on, any backslash in a pattern that is
# followed by a letter that has no special meaning causes an
# error, thus reserving these combinations for future expansion.
# .PP
* checking in one place, instead of having error handling code all over
* the place.
*/
+#define NO_TOKEN_LIMIT 0
+
tok822_externalize(temp, tree->head, TOK822_STR_DEFL);
cleanup_map11_external(state, temp, maps, propagate);
tok822_free_tree(tree->head);
- tree->head = tok822_scan(STR(temp), &tree->tail);
+ tree->head = tok822_scan(STR(temp), &tree->tail, NO_TOKEN_LIMIT);
vstring_free(temp);
}
{
VSTRING *temp = vstring_alloc(100);
+#define NO_TOKEN_LIMIT 0
+
tok822_externalize(temp, tree->head, TOK822_STR_DEFL);
cleanup_masquerade_external(temp, masq_domains);
tok822_free_tree(tree->head);
- tree->head = tok822_scan(STR(temp), &tree->tail);
+ tree->head = tok822_scan(STR(temp), &tree->tail, NO_TOKEN_LIMIT);
vstring_free(temp);
}
* sender addresses, and regenerate the header line. Finally, pipe the
* result through the header line folding routine.
*/
- tree = tok822_parse(vstring_str(header_buf)
- + strlen(hdr_opts->name) + 1);
+ tree = tok822_parse(vstring_str(header_buf) + strlen(hdr_opts->name) + 1,
+ var_token_limit);
addr_list = tok822_grep(tree, TOK822_ADDR);
for (tpp = addr_list; *tpp; tpp++) {
cleanup_rewrite_tree(*tpp);
* recipient addresses, and regenerate the header line. Finally, pipe the
* result through the header line folding routine.
*/
- tree = tok822_parse(vstring_str(header_buf)
- + strlen(hdr_opts->name) + 1);
+ tree = tok822_parse(vstring_str(header_buf) + strlen(hdr_opts->name) + 1,
+ var_token_limit);
addr_list = tok822_grep(tree, TOK822_ADDR);
for (tpp = addr_list; *tpp; tpp++) {
cleanup_rewrite_tree(*tpp);
/*
* Add a missing (Resent-)From: header.
*/
+#define NO_TOKEN_LIMIT 0
+
if ((state->headers_seen & (1 << (state->resent[0] ?
HDR_RESENT_FROM : HDR_FROM))) == 0) {
quote_822_local(state->temp1, *state->sender ?
state->resent, vstring_str(state->temp1));
if (*state->sender && state->fullname && *state->fullname) {
vstring_sprintf(state->temp1, "(%s)", state->fullname);
- token = tok822_parse(vstring_str(state->temp1));
+ token = tok822_parse(vstring_str(state->temp1), NO_TOKEN_LIMIT);
vstring_strcat(state->temp2, " ");
tok822_externalize(state->temp2, token, TOK822_STR_NONE);
tok822_free_tree(token);
VSTRING *dst = vstring_alloc(100);
VSTRING *src = vstring_alloc(100);
+#define NO_TOKEN_LIMIT 0
+
tok822_externalize(src, tree->head, TOK822_STR_DEFL);
cleanup_rewrite_external(dst, STR(src));
tok822_free_tree(tree->head);
- tree->head = tok822_scan(STR(dst), &tree->tail);
+ tree->head = tok822_scan(STR(dst), &tree->tail, NO_TOKEN_LIMIT);
vstring_free(dst);
vstring_free(src);
}
* the result to external (quoted) form. Optionally apply the extension
* to each address found.
*/
- tree = tok822_parse(string);
+#define NO_TOKEN_LIMIT 0
+
+ tree = tok822_parse(string, NO_TOKEN_LIMIT);
addr_list = tok822_grep(tree, TOK822_ADDR);
for (tpp = addr_list; *tpp; tpp++) {
tok822_externalize(extern_addr, tpp[0]->head, TOK822_STR_DEFL);
/* int var_mime_maxdepth;
/* int var_mime_bound_len;
/* int var_header_limit;
+/* int var_token_limit;
/* int var_disable_mime_input;
/* int var_disable_mime_oconv;
/* int var_strict_8bitmime;
int var_mime_maxdepth;
int var_mime_bound_len;
int var_header_limit;
+int var_token_limit;
int var_disable_mime_input;
int var_disable_mime_oconv;
int var_strict_8bitmime;
VAR_DB_CREATE_BUF, DEF_DB_CREATE_BUF, &var_db_create_buf, 1, 0,
VAR_DB_READ_BUF, DEF_DB_READ_BUF, &var_db_read_buf, 1, 0,
VAR_HEADER_LIMIT, DEF_HEADER_LIMIT, &var_header_limit, 1, 0,
+ VAR_TOKEN_LIMIT, DEF_TOKEN_LIMIT, &var_token_limit, 1, 0,
VAR_MIME_MAXDEPTH, DEF_MIME_MAXDEPTH, &var_mime_maxdepth, 1, 0,
VAR_MIME_BOUND_LEN, DEF_MIME_BOUND_LEN, &var_mime_bound_len, 1, 0,
0,
extern int var_smtpd_soft_erlim;
#define VAR_SMTPD_HARD_ERLIM "smtpd_hard_error_limit"
-#define DEF_SMTPD_HARD_ERLIM 100
+#define DEF_SMTPD_HARD_ERLIM 20
extern int var_smtpd_hard_erlim;
#define VAR_SMTPD_ERR_SLEEP "smtpd_error_sleep_time"
extern int var_hopcount_limit;
#define VAR_HEADER_LIMIT "header_size_limit"
-#define DEF_HEADER_LIMIT 10240
+#define DEF_HEADER_LIMIT 102400
extern int var_header_limit;
+#define VAR_TOKEN_LIMIT "header_address_token_limit"
+#define DEF_TOKEN_LIMIT 10240
+extern int var_token_limit;
+
#define VAR_EXTRA_RCPT_LIMIT "extract_recipient_limit"
#define DEF_EXTRA_RCPT_LIMIT 10240
extern int var_extra_rcpt_limit;
#define DEF_STRICT_ENCODING 0
extern bool var_strict_encoding;
+ /*
+ * Bizarre.
+ */
+#define VAR_SENDER_ROUTING "sender_based_routing"
+#define DEF_SENDER_ROUTING 0
+extern bool var_sender_routing;
+
/* LICENSE
/* .ad
/* .fi
* Patches change the patchlevel and the release date. Snapshots change the
* release date only, unless they include the same bugfix as a patch release.
*/
-#define MAIL_RELEASE_DATE "20020602"
+#define MAIL_RELEASE_DATE "20020605"
#define VAR_MAIL_VERSION "mail_version"
#define DEF_MAIL_VERSION "1.1.11-" MAIL_RELEASE_DATE
garbage garbage garbage garbage garbage garbage garbage garbage garbage
garbage garbage garbage garbage garbage garbage garbage garbage garbage
garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
garbage garbage garbage garbage garbage garbage garbage garbage garbage
garbage garbage garbage garbage garbage garbage garbage garbage garbage
garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
+ garbage garbage garbage garbage garbage garbage garbage garbage garbage
HEADER END
BODY END
mime_state: warning: message header length exceeds safety limit
/*
* tok822_parse.c
*/
-extern TOK822 *tok822_scan(const char *, TOK822 **);
+extern TOK822 *tok822_scan(const char *, TOK822 **, int);
extern TOK822 *tok822_scan_addr(const char *);
-extern TOK822 *tok822_parse(const char *);
+extern TOK822 *tok822_parse(const char *, int);
extern VSTRING *tok822_externalize(VSTRING *, TOK822 *, int);
extern VSTRING *tok822_internalize(VSTRING *, TOK822 *, int);
/* SYNOPSIS
/* #include <tok822.h>
/*
-/* TOK822 *tok822_scan(str, tailp)
+/* TOK822 *tok822_scan(str, tailp, limit)
/* const char *str;
/* TOK822 **tailp;
+/* int limit;
/*
-/* TOK822 *tok822_parse(str)
+/* TOK822 *tok822_parse(str, limit)
/* const char *str;
+/* int limit;
/*
/* TOK822 *tok822_scan_addr(str)
/* const char *str;
/* tok822_scan() converts the external-form string in \fIstr\fR
/* to a linear token list. The \fItailp\fR argument is a null pointer
/* or receives the pointer value of the last result list element.
+/* The \fIlimit\fR argument is either zero or an upper bound on the
+/* number of tokens produced.
/*
/* tok822_parse() converts the external-form address list in
/* \fIstr\fR to the corresponding token tree. The parser is permissive
/* and will not throw away information that it does not understand.
/* The parser adds missing commas between addresses.
+/* The \fIlimit\fR argument is either zero or an upper bound on the
+/* number of tokens produced.
/*
/* tok822_scan_addr() converts the external-form string in
/* \fIstr\fR to an address token tree. This is just string to
/* tok822_scan - tokenize string */
-TOK822 *tok822_scan(const char *str, TOK822 **tailp)
+TOK822 *tok822_scan(const char *str, TOK822 **tailp, int tok_count_limit)
{
TOK822 *head = 0;
TOK822 *tail = 0;
TOK822 *tp;
int ch;
+ int tok_count = 0;
/*
* XXX 2822 new feature: Section 4.1 allows "." to appear in a phrase (to
} else {
tail = tok822_append(tail, tp);
}
+ if (tok_count_limit > 0 && ++tok_count >= tok_count_limit)
+ break;
}
if (tailp)
*tailp = tail;
/* tok822_parse - translate external string to token tree */
-TOK822 *tok822_parse(const char *str)
+TOK822 *tok822_parse(const char *str, int tok_count_limit)
{
TOK822 *head;
TOK822 *tail;
* token list that contains all tokens, we can always convert back to
* string form.
*/
- if ((first_token = tok822_scan(str, &last_token)) == 0)
+ if ((first_token = tok822_scan(str, &last_token, tok_count_limit)) == 0)
return (0);
/*
{
TOK822 *tree = tok822_alloc(TOK822_ADDR, (char *) 0);
- tree->head = tok822_scan(addr, &tree->tail);
+ tree->head = tok822_scan(addr, &tree->tail, 0);
return (tree);
}
TOK822 *list;
VSTRING *buf = vstring_alloc(100);
+#define TEST_TOKEN_LIMIT 20
+
while (readlline(buf, VSTREAM_IN, (int *) 0)) {
while (VSTRING_LEN(buf) > 0 && vstring_end(buf)[-1] == '\n') {
vstring_end(buf)[-1] = 0;
}
if (!isatty(vstream_fileno(VSTREAM_IN)))
vstream_printf(">>>%s<<<\n\n", vstring_str(buf));
- list = tok822_parse(vstring_str(buf));
+ list = tok822_parse(vstring_str(buf), TEST_TOKEN_LIMIT);
vstream_printf("Parse tree:\n");
tok822_print(list, 0);
vstream_printf("\n");
* the result. Shipping external form is much simpler than shipping parse
* trees.
*/
+#define NO_TOKEN_LIMIT 0
+
tok822_externalize(input_ext_form, addr->head, TOK822_STR_DEFL);
if (msg_verbose)
msg_info("tok822_rewrite: input: %s", vstring_str(input_ext_form));
if (msg_verbose)
msg_info("tok822_rewrite: result: %s", vstring_str(canon_ext_form));
tok822_free_tree(addr->head);
- addr->head = tok822_scan(vstring_str(canon_ext_form), &addr->tail);
+ addr->head = tok822_scan(vstring_str(canon_ext_form), &addr->tail,
+ NO_TOKEN_LIMIT);
vstring_free(input_ext_form);
vstring_free(canon_ext_form);
if (msg_verbose)
msg_info("deliver_token_string: %s", string);
- tree = tok822_parse(string);
+#define NO_TOKEN_LIMIT 0
+
+ tree = tok822_parse(string, NO_TOKEN_LIMIT);
for (addr = tree; addr != 0; addr = addr->next) {
if (addr->type == TOK822_ADDR) {
if (addr_count)
int var_local_rcpt_lim;
int var_proc_limit;
bool var_verp_bounce_off;
+bool var_sender_routing;
static QMGR_SCAN *qmgr_incoming;
static QMGR_SCAN *qmgr_deferred;
static CONFIG_BOOL_TABLE bool_table[] = {
VAR_ALLOW_MIN_USER, DEF_ALLOW_MIN_USER, &var_allow_min_user,
VAR_VERP_BOUNCE_OFF, DEF_VERP_BOUNCE_OFF, &var_verp_bounce_off,
+ VAR_SENDER_ROUTING, DEF_SENDER_ROUTING, &var_sender_routing,
0,
};
* Resolve the destination to (transport, nexthop, address). The
* result address may differ from the one specified by the sender.
*/
- resolve_clnt_query(recipient->address, &reply);
+ if (var_sender_routing == 0) {
+ resolve_clnt_query(recipient->address, &reply);
+ } else {
+ resolve_clnt_query(message->sender, &reply);
+ vstring_strcpy(reply.recipient, recipient->address);
+ }
if (message->filter_xport) {
vstring_strcpy(reply.transport, message->filter_xport);
if ((nexthop = split_at(STR(reply.transport), ':')) == 0
/* Limit the time for delivery to external command, for delivery via
/* the named \fBtransport\fR. The default limit is taken from the
/* \fBcommand_time_limit\fR parameter.
-/* The limit is enforced by the Postfix queue manager.
+/* The limit is enforced by the pipe delivery agent.
/* SEE ALSO
/* bounce(8) non-delivery status reports
/* master(8) process manager
* Tokenize the input, so that we do the right thing when a quoted
* localpart contains special characters such as "@", ":" and so on.
*/
- if ((tok_list = tok822_scan(STR(line_buffer), (TOK822 **) 0)) == 0)
+#define NO_TOKEN_LIMIT 0
+
+ if ((tok_list = tok822_scan(STR(line_buffer), (TOK822 **) 0,
+ NO_TOKEN_LIMIT)) == 0)
continue;
/*
/* An indexed file type based on hashing.
/* This is available only on systems with support for Berkeley DB
/* databases.
-/* .IP \fBldap\fR
+/* .IP "\fBldap\fR (read-only)"
/* Perform lookups using the LDAP protocol. This is described
/* in an LDAP_README file.
-/* .IP \fBpcre\fR
+/* .IP "\fBmysql\fR (read-only)"
+/* Perform lookups using the MYSQL protocol. This is described
+/* in a MYSQL_README file.
+/* .IP "\fBpcre\fR (read-only)"
/* A lookup table based on Perl Compatible Regular Expressions. The
/* file format is described in \fBpcre_table\fR(5).
-/* .IP \fBregexp\fR
+/* .IP "\fBregexp\fR (read-only)"
/* A lookup table based on regular expressions. The file format is
/* described in \fBregexp_table\fR(5).
-/* .IP \fBstatic\fR
-/* A table that always returns the same result. For example,
-/* \fBstatic:foobar\fR always returns the string \fBfoobar\fR.
-/* .IP \fBunix\fR
+/* .IP "\fBstatic\fR (read-only)"
+/* A table that always returns its name as lookup result. For example,
+/* \fBstatic:foobar\fR always returns the string \fBfoobar\fR as lookup
+/* result.
+/* .IP "\fBunix\fR (read-only)"
/* A limited way to query the UNIX authentication database. The
/* following tables are implemented:
/* .RS
/* standard \fBmain.cf\fR file, in the \fBalternate_config_directories\fR
/* configuration parameter value.
/*
-/* Only the super-user is allowed to specify arbitrary directory names.
+/* Only the superuser is allowed to specify arbitrary directory names.
/* FILES
/* /var/spool/postfix, mail queue
/* /etc/postfix, configuration files
/* \fBpostfix\fR [\fB-c \fIconfig_dir\fR] [\fB-D\fR] [\fB-v\fR]
/* \fIcommand\fR
/* DESCRIPTION
-/* This command is reserved for the super-user. To submit mail,
+/* This command is reserved for the superuser. To submit mail,
/* use the Postfix \fBsendmail\fR command.
/*
/* The \fBpostfix\fR command controls the operation of the Postfix
/* standard \fBmain.cf\fR file, in the \fBalternate_config_directories\fR
/* configuration parameter value.
/*
-/* Only the super-user is allowed to specify arbitrary directory names.
+/* Only the superuser is allowed to specify arbitrary directory names.
/* FILES
/* /var/spool/postfix, mail queue
/* /etc/postfix, configuration files
/* [\fB-r \fIqueue_id\fR] [\fIdirectory ...\fR]
/* DESCRIPTION
/* The \fBpostsuper\fR command does maintenance jobs on the Postfix
-/* queue. Use of the command is restricted to the super-user.
+/* queue. Use of the command is restricted to the superuser.
/*
/* By default, \fBpostsuper\fR performs the operations requested with the
/* \fB-s\fR and \fB-p\fR command-line options on all Postfix queue
* owner.
*/
if (getuid())
- msg_fatal("use of this command is reserved for the super-user");
+ msg_fatal("use of this command is reserved for the superuser");
set_ugid(var_owner_uid, var_owner_gid);
/*
int var_local_con_lim; /* XXX */
int var_proc_limit;
bool var_verp_bounce_off;
+bool var_sender_routing;
static QMGR_SCAN *qmgr_incoming;
static QMGR_SCAN *qmgr_deferred;
static CONFIG_BOOL_TABLE bool_table[] = {
VAR_ALLOW_MIN_USER, DEF_ALLOW_MIN_USER, &var_allow_min_user,
VAR_VERP_BOUNCE_OFF, DEF_VERP_BOUNCE_OFF, &var_verp_bounce_off,
+ VAR_SENDER_ROUTING, DEF_SENDER_ROUTING, &var_sender_routing,
0,
};
* Resolve the destination to (transport, nexthop, address). The
* result address may differ from the one specified by the sender.
*/
- resolve_clnt_query(recipient->address, &reply);
+ if (var_sender_routing == 0) {
+ resolve_clnt_query(recipient->address, &reply);
+ } else {
+ resolve_clnt_query(message->sender, &reply);
+ vstring_strcpy(reply.recipient, recipient->address);
+ }
if (message->filter_xport) {
vstring_strcpy(reply.transport, message->filter_xport);
if ((nexthop = split_at(STR(reply.transport), ':')) == 0
* pickup would not be able to run chrooted, and it may not be desirable
* to use login names at all.
*/
+#define NO_TOKEN_LIMIT 0
+
if (sender != 0) {
- tree = tok822_parse(sender);
+ tree = tok822_parse(sender, NO_TOKEN_LIMIT);
for (naddr = 0, tp = tree; tp != 0; tp = tp->next)
if (tp->type == TOK822_ADDR)
naddr++, tok822_internalize(buf, tp->head, TOK822_STR_DEFL);
rec_fputs(dst, REC_TYPE_VERP, verp_delims);
if (recipients) {
for (cpp = recipients; *cpp != 0; cpp++) {
- tree = tok822_parse(*cpp);
+ tree = tok822_parse(*cpp, NO_TOKEN_LIMIT);
for (tp = tree; tp != 0; tp = tp->next) {
if (tp->type == TOK822_ADDR) {
tok822_internalize(buf, tp->head, TOK822_STR_DEFL);
/* It is the program that emulates the sendmail `mailq' command.
/*
/* The \fBshowq\fR daemon can also be run in stand-alone mode
-/* by the super-user. This mode of operation is used to emulate
+/* by the superuser. This mode of operation is used to emulate
/* the `mailq' command while the Postfix mail system is down.
/* SECURITY
/* .ad
* XXX We have only one address parser, written according to the rules of
* RFC 822. That standard differs subtly from RFC 821.
*/
+#define NO_TOKEN_LIMIT 0
+
if (msg_verbose)
msg_info("%s: input: %s", myname, STR(arg->vstrval));
if (STR(arg->vstrval)[0] == '<'
&& STR(arg->vstrval)[LEN(arg->vstrval) - 1] == '>') {
junk = mystrndup(STR(arg->vstrval) + 1, LEN(arg->vstrval) - 2);
- tree = tok822_parse(junk);
+ tree = tok822_parse(junk, NO_TOKEN_LIMIT);
myfree(junk);
} else
- tree = tok822_parse(STR(arg->vstrval));
+ tree = tok822_parse(STR(arg->vstrval), NO_TOKEN_LIMIT);
/*
* Find trouble.
* VSTREAM and kernel read buffers dry up.
*/
if (vstream_peek(state->stream) <= 0
- && peekfd(vstream_fileno(state->stream)) <= 0)
+ && readable(vstream_fileno(state->stream)) <= 0)
return (0);
}
return (0);
* VSTREAM and kernel read buffers dry up.
*/
if (vstream_peek(state->stream) <= 0
- && peekfd(vstream_fileno(state->stream)) <= 0)
+ && readable(vstream_fileno(state->stream)) <= 0)
return (0);
}
/*
* A lone empty string becomes the postmaster.
*/
+#define NO_TOKEN_LIMIT 0
+
if (tree->head == tree->tail && tree->head->type == TOK822_QSTRING
&& VSTRING_LEN(tree->head->vstr) == 0) {
tok822_free(tree->head);
- tree->head = tok822_scan(MAIL_ADDR_POSTMASTER, &tree->tail);
+ tree->head = tok822_scan(MAIL_ADDR_POSTMASTER, &tree->tail,
+ NO_TOKEN_LIMIT);
rewrite_tree(REWRITE_CANON, tree);
}
saved_domain = 0;
} else {
tok822_sub_append(tree, tok822_alloc('@', (char *) 0));
- tok822_sub_append(tree, tok822_scan(var_myhostname, (TOK822 **) 0));
+ tok822_sub_append(tree, tok822_scan(var_myhostname, (TOK822 **) 0,
+ NO_TOKEN_LIMIT));
}
}
tok822_internalize(nextrcpt, tree, TOK822_STR_DEFL);
/*
* Append missing @origin
*/
+#define NO_TOKEN_LIMIT 0
+
else if (var_append_at_myorigin != 0) {
domain = tok822_sub_append(tree, tok822_alloc('@', (char *) 0));
- tok822_sub_append(tree, tok822_scan(var_myorigin, (TOK822 **) 0));
+ tok822_sub_append(tree, tok822_scan(var_myorigin, (TOK822 **) 0,
+ NO_TOKEN_LIMIT));
}
}
&& tok822_find_type(domain, TOK822_DOMLIT) == 0
&& tok822_find_type(domain, '.') == 0) {
tok822_sub_append(tree, tok822_alloc('.', (char *) 0));
- tok822_sub_append(tree, tok822_scan(var_mydomain, (TOK822 **) 0));
+ tok822_sub_append(tree, tok822_scan(var_mydomain, (TOK822 **) 0,
+ NO_TOKEN_LIMIT));
}
/*