2
0
mirror of https://github.com/vdukhovni/postfix synced 2025-08-30 21:55:20 +00:00

postfix-1.1.11-20021013

This commit is contained in:
Wietse Venema
2002-10-13 00:00:00 -05:00
committed by Viktor Dukhovni
parent 16566b2c3d
commit 1f37e701d6
32 changed files with 652 additions and 550 deletions

View File

@@ -7032,6 +7032,32 @@ Apologies for any names omitted.
result is dynamically allocated. Victor Duchovni. File: result is dynamically allocated. Victor Duchovni. File:
smtpd/smtpd_check.c. smtpd/smtpd_check.c.
20020929
Updated MacOSX support scripts from Gerben Wierda. Files:
auxiliary/MacOSX/*.
20021009
Bugfix: SIZE errors should be reported at MAIL FROM time,
and should not be postponed (with smtpd_delay_reject = yes)
until RCPT TO time. Reported by Jeroen Scheerder, Utrecht
University. Files: smtpd/smtpd.c smtpd/smtpd_check.c.
20021013
When Postfix development started, Linux mail delivery
software such as procmail did not use kernel locks, and
Postfix picked one that seemed plausible, namely, flock().
In the mean time, Linux mail delivery software seems to
have standardized on fcntl() locks. File: util/sys_defs.h.
Feature: body_checks_size_limit parameter to specify how much
of a message body segment (or attachment, if you prefer to
use that term) is subjected to body_checks inspection.
Default limit: 50 kbytes. Files: global/mime_state.c,
cleanup/cleanup_message.c.
Open problems: Open problems:
Low: smtpd should log queue ID with reject/warn/hold/discard Low: smtpd should log queue ID with reject/warn/hold/discard

View File

@@ -12,6 +12,27 @@ snapshot release). Patches change the patchlevel and the release
date. Snapshots change only the release date, unless they include date. Snapshots change only the release date, unless they include
the same bugfixes as a patch release. the same bugfixes as a patch release.
Incompatible changes with Postfix snapshot 1.1.11-20021013
==========================================================
The default Linux kernel lock style for mailbox delivery is changed
from flock() to fcntl(). This has no impact if your system uses
procmail for local delivery, if you use maildir-style mailboxes,
or when mailbox access software locks mailboxes with username.lock
files (which is usually the case with non-maildir mailboxes).
Major changes with Postfix snapshot 1.1.11-20021013
===================================================
The body_checks_max_size parameter limits the amount of text per
message body segment (or attachment, if you prefer to use that
term) that is subjected to body_checks inspection. The default
limit is 50 kbytes. This speeds up the processing of mail with
large attachments.
Updated MacOS X support by Gerben Wierda. See the auxiliary/MacOSX
directory.
Incompatible changes with Postfix snapshot 1.1.11-20020923 Incompatible changes with Postfix snapshot 1.1.11-20020923
========================================================== ==========================================================

View File

@@ -3,15 +3,26 @@
# Gerben Wierda, Oct 2001. Adapted from an existing example. I waive every # Gerben Wierda, Oct 2001. Adapted from an existing example. I waive every
# copyright on this and I also do not give any warranty. # copyright on this and I also do not give any warranty.
# Updated Sepember 29, 2002
# To work properly, the POSTFIX variable needs to be set to -YES-
# in /etc/hostconfig
. /etc/rc.common . /etc/rc.common
if [ "${POSTFIX:=-NO-}" = "-YES-" -a "${MAILSERVER:=-NO-}" = "-YES-" ]
then
ConsoleMessage "Cannot run concurrent postfix and sendmail"
sleep 2
exit
fi
## ##
# Start mail server # Start mail server
## ##
if [ "$1" == "start" ] if [ "$1" == "start" ]
then then
if [ "${MAILSERVER:=-NO-}" = "-YES-" ] if [ "${POSTFIX:=-NO-}" = "-YES-" ]
then then
ConsoleMessage "Starting Postfix mail services" ConsoleMessage "Starting Postfix mail services"
/usr/sbin/postfix start /usr/sbin/postfix start
@@ -22,7 +33,7 @@ then
/usr/sbin/postfix stop /usr/sbin/postfix stop
elif [ "$1" == "restart" ] elif [ "$1" == "restart" ]
then then
if [ "${MAILSERVER:=-NO-}" = "-YES-" ] if [ "${POSTFIX:=-NO-}" = "-YES-" ]
then then
ConsoleMessage "Reloading Postfix configuration" ConsoleMessage "Reloading Postfix configuration"
/usr/sbin/postfix reload /usr/sbin/postfix reload

View File

@@ -5,6 +5,9 @@ Let's start with the important warning:
DO NOT USE THE MULTIPLE USERS APPLICATION TO CREATE THE POSTFIX USER! DO NOT USE THE MULTIPLE USERS APPLICATION TO CREATE THE POSTFIX USER!
NOTE: As of 29 September 2002, these instructions and the scripts have changed
to make the solution more robust for Apple updates.
Run the commands below in the order that they are presented Run the commands below in the order that they are presented
A. INSTALLING POSTFIX for the first time and selecting it as the active A. INSTALLING POSTFIX for the first time and selecting it as the active
@@ -12,52 +15,56 @@ A. INSTALLING POSTFIX for the first time and selecting it as the active
# All these commands are written to be run from this directory. # All these commands are written to be run from this directory.
# This repairs the previous Oct 2001 setup if any
sudo ./repair-oldsetup
# Prepare for reactivating sendmail
sudo ./backup-sendmail-binaries
# this creates the necessary users & groups for proper operation # this creates the necessary users & groups for proper operation
# of postfix: # of postfix:
sudo ./niscript sudo ./niscript
# Prepare for reactivating sendmail if you want to
sudo ./backup-sendmail-binaries
# Install postfix: # Install postfix:
# When the script asks you for setgid (the default will be no) tell it # When the script asks you for setgid (the default will be no) tell it
# maildrop # maildrop
(cd ../..; sudo make install) (cd ../..; sudo make install)
# Prepare for reactivating postfix if you want to # Prepare for reactivating postfix
sudo ./backup-postfix-binaries sudo ./backup-postfix-binaries
# edit /etc/postfix/main.cf to suit your requirements # edit /etc/postfix/main.cf to suit your requirements
### add your own commands here ###
### add your own command here ### # Activate postfix startup at boot time. Deactivates sendmail.
# Install the startup item and move the existing sendmail startup item
# out of the way
sudo ./activate-postfix sudo ./activate-postfix
# Restart your computer
# Test. Read INSTALL for a series of suggested tests. # Test. Read INSTALL for a series of suggested tests.
B. RESTORING Sendmail as the MTA when Postfix is the active MTA B. DEACTIVATING POSTFIX
# Deactivate postfix startup at boot time
sudo ./deactivate-postfix
C. RESTORING Sendmail as the MTA when Postfix is the active MTA
# This repairs the previous Oct 2001 setup if any
sudo ./repair-oldsetup
# Deactivate postfix startup at boot time
sudo ./deactivate-postfix
# Stop postfix
# Restore the sendmail binaries
# Restore the Sendmail startup item and move the Postfix startup item
# out of the way
sudo ./activate-sendmail sudo ./activate-sendmail
# Restart your computer # Restart your computer
C. RESTORING postfix as the MTA when Sendmail is the active MTA D. RESTORING postfix as the MTA when Sendmail is the active MTA
# The first time you have to follow the steps of A. # NOTE: The first time you activate postfix you have to follow
# the steps of A.
# Kill the running sendmail daemon if you know how # This repairs the previous Oct 2001 setup if any
sudo ./repair-oldsetup
# Restore the postfix binaries
# Restore the Postfix startup item and move the Sendmail startup item
# out of the way
sudo ./activate-postfix sudo ./activate-postfix
# Restart your computer

View File

@@ -5,6 +5,7 @@
. ./defines . ./defines
# Activate binaries
if [ ! -e ${POSTFIXBACKUPDIR}/sendmail ] if [ ! -e ${POSTFIXBACKUPDIR}/sendmail ]
then then
echo "Something is wrong: there is no existing postfix binary backup" echo "Something is wrong: there is no existing postfix binary backup"
@@ -30,32 +31,13 @@ else
fi fi
fi fi
if [ -e "${SSI}" ] # De-activate sendmail in /etc/hostconfig
then /usr/bin/perl -pi -e 's/MAILSERVER=-YES-/MAILSERVER=-NO-/g' /etc/hostconfig
if [ ! -d "${SIDISABLEDDIR}" ] # Activate postfix in /etc/hostconfig
then if /usr/bin/grep '^POSTFIX=-NO-' /etc/hostconfig >/dev/null 2>&1; then
mkdir -p "${SIDISABLEDDIR}" /usr/bin/perl -pi -e 's/POSTFIX=-NO-/POSTFIX=-YES-/g' /etc/hostconfig
fi
echo "Moving existing Sendmail StartupItem to ${SIDISABLEDDIR}..."
if [ -e "${SSIDISABLED}" ]
then
echo "Something is wrong. A disabled Sendmail StartupItem already exists."
DATETIME=`date +"%Y%b%e-%H%M%S"`
echo "Moving Sendmail to Sendmail.${DATETIME}"
mv "${SSI}" "${SSIDISABLED}.${DATETIME}"
echo "You should have just one ${SSIDISABLED}"
else
mv "${SSI}" "${SSIDISABLED}"
fi
fi
. /etc/hostconfig
if [ "${MAILSERVER:=-NO-}" = "-YES-" ]
then
echo "Postfix will start on reboot"
else else
echo "Note: Postfix needs MAILSERVER set to -YES- in /etc/hostconfig" echo "POSTFIX=-YES-" >>/etc/hostconfig
echo "Postfix will NOT start on reboot"
fi fi
/usr/sbin/postfix start

View File

@@ -5,9 +5,12 @@
. ./defines . ./defines
. ./deactivate-postfix
# Activate binaries
if [ ! -e ${SENDMAILBACKUPDIR}/sendmail ] if [ ! -e ${SENDMAILBACKUPDIR}/sendmail ]
then then
echo "Something is wrong: there is no existing postfix binary backup" echo "Something is wrong: there is no existing sendmail binary backup"
exit 1; exit 1;
else else
echo "Restoring sendmail versions of sendmail programs from backup..." echo "Restoring sendmail versions of sendmail programs from backup..."
@@ -16,45 +19,6 @@ else
(cd ${SENDMAILBACKUPDIR}; tar cf - mailq) | (cd /usr/bin; tar xf -) (cd ${SENDMAILBACKUPDIR}; tar cf - mailq) | (cd /usr/bin; tar xf -)
fi fi
if [ -e "${SSI}" ] # Activate sendmail in /etc/hostconfig
then /usr/bin/perl -pi -e 's/MAILSERVER=-NO-/MAILSERVER=-YES-/g' /etc/hostconfig
echo "Sendmail StartupItem already exists."
else
if [ -e "${SSIDISABLED}" ]
then
echo "Reinstating disabled Sendmail StartupItem..."
mv "${SSIDISABLED}" "${SSI}"
else
echo "Something is wrong. I cannot find ${SSIDISABLED}"
echo "Postfix will be uninstalled, Sendmail not reinstalled."
fi
fi
if [ -e "${PSI}" ]
then
if [ ! -d "${SIDISABLEDDIR}" ]
then
mkdir -p "${SIDISABLEDDIR}"
fi
echo "Moving existing Postfix StartupItem to ${SIDISABLEDDIR}..."
if [ -e "${PSIDISABLED}" ]
then
echo "Something is wrong. A disabled Postfix StartupItem already exists."
DATETIME=`date +"%Y%b%e-%H%M%S"`
echo "Moving Postfix to Postfix.${DATETIME}"
mv "${PSI}" "${PSIDISABLED}.${DATETIME}"
echo "You should have just one ${PSIDISABLED}"
else
mv "${PSI}" "${PSIDISABLED}"
fi
fi
. /etc/hostconfig
if [ "${MAILSERVER:=-NO-}" = "-YES-" ]
then
echo "Sendmail will start on reboot"
else
echo "Note: Sendmail needs MAILSERVER set to -YES- in /etc/hostconfig"
echo "Sendmail will NOT start on reboot"
fi

View File

@@ -0,0 +1,16 @@
#!/bin/sh
# Written by Gerben Wierda, Sep 2002. I waive every copyright on this and
# I also do not give any warranty.
. ./defines
if [ -e "${PSI}" ]
then
mv "${PSI}" "${PSIDISABLED}"
fi
# De-activate postfix in /etc/hostconfig
/usr/bin/perl -pi -e 's/POSTFIX=-YES-/POSTFIX=-NO-/g' /etc/hostconfig
/usr/sbin/postfix stop >/dev/null 2>&1

View File

@@ -3,13 +3,10 @@
# Written by Gerben Wierda, Oct 2001. I waive every copyright on this and # Written by Gerben Wierda, Oct 2001. I waive every copyright on this and
# I also do not give any warranty. # I also do not give any warranty.
SIDIR="/System/Library/StartupItems" SIDIR="/Library/StartupItems"
SIDISABLEDDIR="/System/Library/DisabledStartupItems"
PSI="${SIDIR}/Postfix" PSI="${SIDIR}/Postfix"
SSI="${SIDIR}/Sendmail" PSIDISABLED="${PSI}.disabled"
PSIDISABLED="${SIDISABLEDDIR}/Postfix"
SSIDISABLED="${SIDISABLEDDIR}/Sendmail"
POSTFIXBACKUPDIR=/usr/sbin/.postfixbackup POSTFIXBACKUPDIR=/usr/sbin/.postfixbackup
SENDMAILBACKUPDIR=/usr/sbin/.sendmailbackup SENDMAILBACKUPDIR=/usr/sbin/.sendmailbackup

0
postfix/auxiliary/MacOSX/niscript Normal file → Executable file
View File

View File

@@ -0,0 +1,8 @@
#!/bin/sh
if [ -d /System/Library/DisabledStartupItems/Sendmail ]
then
mv /System/Library/DisabledStartupItems/Sendmail /System/Library/StartupItems
rmdir /System/Library/DisabledStartupItems/Sendmail
rm -rf /System/Library/StartupItems/Postfix
fi

View File

@@ -144,3 +144,12 @@ nested_header_checks = $header_checks
# overrides the main.cf content_filter setting. # overrides the main.cf content_filter setting.
# #
body_checks = regexp:/etc/postfix/body_checks body_checks = regexp:/etc/postfix/body_checks
# The body_checks_max_size parameter controls how much text in a
# message body segment (or attachment, if you prefer to use that
# term) is subjected to body_checks inspection.
#
# By default, only the first 50 kbytes of a message body segment are
# inspected with body_checks patterns.
#
body_checks_max_size = 51200

View File

@@ -77,56 +77,60 @@ CLEANUP(8) CLEANUP(8)
lines. These filters see physical lines one at a lines. These filters see physical lines one at a
time, in chunks of at most line_length_limit bytes. time, in chunks of at most line_length_limit bytes.
<b>body</b><i>_</i><b>checks</b><i>_</i><b>size</b><i>_</i><b>limit</b>
The amount of content per message body segment that
is subjected to <b>$body</b><i>_</i><b>checks</b> filtering.
<b>header</b><i>_</i><b>checks</b> <b>header</b><i>_</i><b>checks</b>
<b>mime</b><i>_</i><b>header</b><i>_</i><b>checks</b> (default: <b>$header</b><i>_</i><b>checks</b>) <b>mime</b><i>_</i><b>header</b><i>_</i><b>checks</b> (default: <b>$header</b><i>_</i><b>checks</b>)
<b>nested</b><i>_</i><b>header</b><i>_</i><b>checks</b> (default: <b>$header</b><i>_</i><b>checks</b>) <b>nested</b><i>_</i><b>header</b><i>_</i><b>checks</b> (default: <b>$header</b><i>_</i><b>checks</b>)
Lookup tables with content filters for message Lookup tables with content filters for message
header lines: respectively, these are applied to header lines: respectively, these are applied to
the primary message headers (not including MIME the primary message headers (not including MIME
headers), to the MIME headers anywhere in the mes- headers), to the MIME headers anywhere in the mes-
sage, and to the initial headers of attached mes- sage, and to the initial headers of attached mes-
sages. These filters see logical headers one at a sages. These filters see logical headers one at a
time, including headers that span multiple lines. time, including headers that span multiple lines.
<b>MIME</b> <b>Processing</b> <b>MIME</b> <b>Processing</b>
<b>disable</b><i>_</i><b>mime</b><i>_</i><b>input</b><i>_</i><b>processing</b> <b>disable</b><i>_</i><b>mime</b><i>_</i><b>input</b><i>_</i><b>processing</b>
While receiving, give no special treatment to <b>Con-</b> While receiving, give no special treatment to <b>Con-</b>
<b>tent-Type:</b> message headers; all text after the ini- <b>tent-Type:</b> message headers; all text after the ini-
tial message headers is considered to be part of tial message headers is considered to be part of
the message body. the message body.
<b>mime</b><i>_</i><b>boundary</b><i>_</i><b>length</b><i>_</i><b>limit</b> <b>mime</b><i>_</i><b>boundary</b><i>_</i><b>length</b><i>_</i><b>limit</b>
The amount of space that will be allocated for MIME The amount of space that will be allocated for MIME
multipart boundary strings. The MIME processor is multipart boundary strings. The MIME processor is
unable to distinguish between boundary strings that unable to distinguish between boundary strings that
do not differ in the first <b>$mime</b><i>_</i><b>bound-</b> do not differ in the first <b>$mime</b><i>_</i><b>bound-</b>
<b>ary</b><i>_</i><b>length</b><i>_</i><b>limit</b> characters. <b>ary</b><i>_</i><b>length</b><i>_</i><b>limit</b> characters.
<b>mime</b><i>_</i><b>nesting</b><i>_</i><b>limit</b> <b>mime</b><i>_</i><b>nesting</b><i>_</i><b>limit</b>
The maximal nesting level of multipart mail that The maximal nesting level of multipart mail that
the MIME processor can handle. Refuse mail that is the MIME processor can handle. Refuse mail that is
nested deeper. nested deeper.
<b>strict</b><i>_</i><b>8bitmime</b> <b>strict</b><i>_</i><b>8bitmime</b>
Turn on both <b>strict</b><i>_</i><b>7bit</b><i>_</i><b>headers</b> and <b>strict</b><i>_</i><b>8bit-</b> Turn on both <b>strict</b><i>_</i><b>7bit</b><i>_</i><b>headers</b> and <b>strict</b><i>_</i><b>8bit-</b>
<b>mime</b><i>_</i><b>body</b>. <b>mime</b><i>_</i><b>body</b>.
<b>strict</b><i>_</i><b>7bit</b><i>_</i><b>headers</b> <b>strict</b><i>_</i><b>7bit</b><i>_</i><b>headers</b>
Reject mail with 8-bit text in message headers. Reject mail with 8-bit text in message headers.
This blocks mail from poorly written applications. This blocks mail from poorly written applications.
<b>strict</b><i>_</i><b>8bitmime</b><i>_</i><b>body</b> <b>strict</b><i>_</i><b>8bitmime</b><i>_</i><b>body</b>
Reject mail with 8-bit text in content that claims Reject mail with 8-bit text in content that claims
to be 7-bit, or in content that has no explicit to be 7-bit, or in content that has no explicit
content encoding information. This blocks mail content encoding information. This blocks mail
mail poorly written mail software. Unfortunately, mail poorly written mail software. Unfortunately,
this also breaks majordomo approval requests when this also breaks majordomo approval requests when
the included request contains valid 8-bit MIME the included request contains valid 8-bit MIME
mail, and it breaks bounces from mailers that do mail, and it breaks bounces from mailers that do
not properly encapsulate 8-bit content (for exam- not properly encapsulate 8-bit content (for exam-
ple, bounces from qmail or from old versions of ple, bounces from qmail or from old versions of
Postfix). Postfix).
<b>strict</b><i>_</i><b>mime</b><i>_</i><b>domain</b><i>_</i><b>encoding</b> <b>strict</b><i>_</i><b>mime</b><i>_</i><b>domain</b><i>_</i><b>encoding</b>
@@ -136,7 +140,7 @@ CLEANUP(8) CLEANUP(8)
<b>Miscellaneous</b> <b>Miscellaneous</b>
<b>always</b><i>_</i><b>bcc</b> <b>always</b><i>_</i><b>bcc</b>
Address to send a copy of each message that enters Address to send a copy of each message that enters
the system. the system.
<b>hopcount</b><i>_</i><b>limit</b> <b>hopcount</b><i>_</i><b>limit</b>
@@ -149,8 +153,8 @@ CLEANUP(8) CLEANUP(8)
<b>Address</b> <b>transformations</b> <b>Address</b> <b>transformations</b>
<b>empty</b><i>_</i><b>address</b><i>_</i><b>recipient</b> <b>empty</b><i>_</i><b>address</b><i>_</i><b>recipient</b>
The destination for undeliverable mail from &lt;&gt;. The destination for undeliverable mail from &lt;&gt;.
This substitution is done before all other address This substitution is done before all other address
rewriting. rewriting.
<b>canonical</b><i>_</i><b>maps</b> <b>canonical</b><i>_</i><b>maps</b>
@@ -166,16 +170,16 @@ CLEANUP(8) CLEANUP(8)
header sender addresses. header sender addresses.
<b>masquerade</b><i>_</i><b>classes</b> <b>masquerade</b><i>_</i><b>classes</b>
List of address classes subject to masquerading: List of address classes subject to masquerading:
zero or more of <b>envelope</b><i>_</i><b>sender</b>, <b>envelope</b><i>_</i><b>recipi-</b> zero or more of <b>envelope</b><i>_</i><b>sender</b>, <b>envelope</b><i>_</i><b>recipi-</b>
<b>ent</b>, <b>header</b><i>_</i><b>sender</b>, <b>header</b><i>_</i><b>recipient</b>. <b>ent</b>, <b>header</b><i>_</i><b>sender</b>, <b>header</b><i>_</i><b>recipient</b>.
<b>masquerade</b><i>_</i><b>domains</b> <b>masquerade</b><i>_</i><b>domains</b>
List of domains that hide their subdomain struc- List of domains that hide their subdomain struc-
ture. ture.
<b>masquerade</b><i>_</i><b>exceptions</b> <b>masquerade</b><i>_</i><b>exceptions</b>
List of user names that are not subject to address List of user names that are not subject to address
masquerading. masquerading.
<b>virtual</b><i>_</i><b>maps</b> <b>virtual</b><i>_</i><b>maps</b>
@@ -184,7 +188,7 @@ CLEANUP(8) CLEANUP(8)
<b>Resource</b> <b>controls</b> <b>Resource</b> <b>controls</b>
<b>duplicate</b><i>_</i><b>filter</b><i>_</i><b>limit</b> <b>duplicate</b><i>_</i><b>filter</b><i>_</i><b>limit</b>
Limit the number of envelope recipients that are Limit the number of envelope recipients that are
remembered. remembered.
<b>header</b><i>_</i><b>size</b><i>_</i><b>limit</b> <b>header</b><i>_</i><b>size</b><i>_</i><b>limit</b>
@@ -193,11 +197,11 @@ CLEANUP(8) CLEANUP(8)
<b>in</b><i>_</i><b>flow</b><i>_</i><b>delay</b> <b>in</b><i>_</i><b>flow</b><i>_</i><b>delay</b>
Amount of time to pause before accepting a message, Amount of time to pause before accepting a message,
when the message arrival rate exceeds the message when the message arrival rate exceeds the message
delivery rate. delivery rate.
<b>extract</b><i>_</i><b>recipient</b><i>_</i><b>limit</b> <b>extract</b><i>_</i><b>recipient</b><i>_</i><b>limit</b>
Limit the amount of recipients extracted from mes- Limit the amount of recipients extracted from mes-
sage headers. sage headers.
<b>SEE</b> <b>ALSO</b> <b>SEE</b> <b>ALSO</b>
@@ -212,7 +216,7 @@ CLEANUP(8) CLEANUP(8)
/etc/postfix/virtual*, virtual mapping table /etc/postfix/virtual*, virtual mapping table
<b>LICENSE</b> <b>LICENSE</b>
The Secure Mailer license must be distributed with this The Secure Mailer license must be distributed with this
software. software.
<b>AUTHOR(S)</b> <b>AUTHOR(S)</b>

View File

@@ -81,6 +81,9 @@ a configuration change.
Lookup tables with content filters for message body lines. Lookup tables with content filters for message body lines.
These filters see physical lines one at a time, in chunks of These filters see physical lines one at a time, in chunks of
at most line_length_limit bytes. at most line_length_limit bytes.
.IP \fBbody_checks_size_limit\fP
The amount of content per message body segment that is
subjected to \fB$body_checks\fR filtering.
.IP \fBheader_checks\fR .IP \fBheader_checks\fR
.IP "\fBmime_header_checks\fR (default: \fB$header_checks\fR)" .IP "\fBmime_header_checks\fR (default: \fB$header_checks\fR)"
.IP "\fBnested_header_checks\fR (default: \fB$header_checks\fR)" .IP "\fBnested_header_checks\fR (default: \fB$header_checks\fR)"

View File

@@ -67,6 +67,9 @@
/* Lookup tables with content filters for message body lines. /* Lookup tables with content filters for message body lines.
/* These filters see physical lines one at a time, in chunks of /* These filters see physical lines one at a time, in chunks of
/* at most line_length_limit bytes. /* at most line_length_limit bytes.
/* .IP \fBbody_checks_size_limit\fP
/* The amount of content per message body segment that is
/* subjected to \fB$body_checks\fR filtering.
/* .IP \fBheader_checks\fR /* .IP \fBheader_checks\fR
/* .IP "\fBmime_header_checks\fR (default: \fB$header_checks\fR)" /* .IP "\fBmime_header_checks\fR (default: \fB$header_checks\fR)"
/* .IP "\fBnested_header_checks\fR (default: \fB$header_checks\fR)" /* .IP "\fBnested_header_checks\fR (default: \fB$header_checks\fR)"

View File

@@ -110,12 +110,14 @@ int var_extra_rcpt_limit; /* recipient extract limit */
char *var_rcpt_witheld; /* recipients not disclosed */ char *var_rcpt_witheld; /* recipients not disclosed */
char *var_masq_classes; /* what to masquerade */ char *var_masq_classes; /* what to masquerade */
int var_qattr_count_limit; /* named attribute limit */ int var_qattr_count_limit; /* named attribute limit */
int var_body_check_len; /* when to stop body scan */
CONFIG_INT_TABLE cleanup_int_table[] = { CONFIG_INT_TABLE cleanup_int_table[] = {
VAR_HOPCOUNT_LIMIT, DEF_HOPCOUNT_LIMIT, &var_hopcount_limit, 1, 0, VAR_HOPCOUNT_LIMIT, DEF_HOPCOUNT_LIMIT, &var_hopcount_limit, 1, 0,
VAR_DUP_FILTER_LIMIT, DEF_DUP_FILTER_LIMIT, &var_dup_filter_limit, 0, 0, VAR_DUP_FILTER_LIMIT, DEF_DUP_FILTER_LIMIT, &var_dup_filter_limit, 0, 0,
VAR_EXTRA_RCPT_LIMIT, DEF_EXTRA_RCPT_LIMIT, &var_extra_rcpt_limit, 0, 0, VAR_EXTRA_RCPT_LIMIT, DEF_EXTRA_RCPT_LIMIT, &var_extra_rcpt_limit, 0, 0,
VAR_QATTR_COUNT_LIMIT, DEF_QATTR_COUNT_LIMIT, &var_qattr_count_limit, 1, 0, VAR_QATTR_COUNT_LIMIT, DEF_QATTR_COUNT_LIMIT, &var_qattr_count_limit, 1, 0,
VAR_BODY_CHECK_LEN, DEF_BODY_CHECK_LEN, &var_body_check_len, 0, 0,
0, 0,
}; };

View File

@@ -344,7 +344,8 @@ static int cleanup_act(CLEANUP_STATE *state, char *context, const char *buf,
/* cleanup_header_callback - process one complete header line */ /* cleanup_header_callback - process one complete header line */
static void cleanup_header_callback(void *context, int header_class, static void cleanup_header_callback(void *context, int header_class,
HEADER_OPTS *hdr_opts, VSTRING *header_buf) HEADER_OPTS *hdr_opts, VSTRING *header_buf,
off_t unused_offset)
{ {
CLEANUP_STATE *state = (CLEANUP_STATE *) context; CLEANUP_STATE *state = (CLEANUP_STATE *) context;
const char *myname = "cleanup_header_callback"; const char *myname = "cleanup_header_callback";
@@ -581,7 +582,9 @@ static void cleanup_header_done_callback(void *context)
/* cleanup_body_callback - output one body record */ /* cleanup_body_callback - output one body record */
static void cleanup_body_callback(void *context, int type, const char *buf, int len) static void cleanup_body_callback(void *context, int type,
const char *buf, int len,
off_t offset)
{ {
CLEANUP_STATE *state = (CLEANUP_STATE *) context; CLEANUP_STATE *state = (CLEANUP_STATE *) context;
@@ -591,7 +594,9 @@ static void cleanup_body_callback(void *context, int type, const char *buf, int
* only in chunks of line_length_limit (2048) characters; it is easily * only in chunks of line_length_limit (2048) characters; it is easily
* bypassed with encodings and other tricks. * bypassed with encodings and other tricks.
*/ */
if ((state->flags & CLEANUP_FLAG_FILTER) && cleanup_body_checks) { if ((state->flags & CLEANUP_FLAG_FILTER)
&& cleanup_body_checks
&& (var_body_check_len == 0 || offset < var_body_check_len)) {
const char *value; const char *value;
if ((value = maps_find(cleanup_body_checks, buf, 0)) != 0) { if ((value = maps_find(cleanup_body_checks, buf, 0)) != 0) {

View File

@@ -1004,6 +1004,10 @@ extern char *var_nesthdr_checks;
#define DEF_BODY_CHECKS "" #define DEF_BODY_CHECKS ""
extern char *var_body_checks; extern char *var_body_checks;
#define VAR_BODY_CHECK_LEN "body_checks_size_limit"
#define DEF_BODY_CHECK_LEN (50*1024)
extern int var_body_check_len;
/* /*
* Bounce service: truncate bounce message that exceed $bounce_size_limit. * Bounce service: truncate bounce message that exceed $bounce_size_limit.
*/ */

View File

@@ -20,7 +20,7 @@
* 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, unless they include the same bugfix as a patch release. * release date only, unless they include the same bugfix as a patch release.
*/ */
#define MAIL_RELEASE_DATE "20020928" #define MAIL_RELEASE_DATE "20021013"
#define VAR_MAIL_VERSION "mail_version" #define VAR_MAIL_VERSION "mail_version"
#define DEF_MAIL_VERSION "1.1.11-" MAIL_RELEASE_DATE #define DEF_MAIL_VERSION "1.1.11-" MAIL_RELEASE_DATE

View File

@@ -1,9 +1,9 @@
mime_state: warning: improper use of 8-bit data in message header: Header: f??bar mime_state: warning: improper use of 8-bit data in message header: Header: f??bar
MAIN Header: f<><66>bar MAIN 0 Header: f<><66>bar
HEADER END HEADER END
BODY N BODY N 0
mime_state: warning: improper use of 8-bit data in message body: b?dy mime_state: warning: improper use of 8-bit data in message body: b?dy
BODY N b<>dy BODY N 1 b<>dy
BODY END BODY END
mime_state: warning: improper use of 8-bit data in message header mime_state: warning: improper use of 8-bit data in message header
mime_state: warning: improper use of 8-bit data in message body mime_state: warning: improper use of 8-bit data in message body

View File

@@ -1,93 +1,93 @@
MAIN mime-version: 1.0 MAIN 0 mime-version: 1.0
mime_state: header_token: text / plain mime_state: header_token: text / plain
MAIN content-type: text/plain MAIN 25 content-type: text/plain
mime_state: header_token: 8bit mime_state: header_token: 8bit
MAIN Content-Transfer-Encoding: quoted-printable MAIN 57 Content-Transfer-Encoding: quoted-printable
HEADER END HEADER END
BODY N BODY N 0
BODY N =20 BODY N 1 =20
BODY N x=20 BODY N 5 x=20
BODY N xx=20 BODY N 10 xx=20
BODY N xxx=20 BODY N 16 xxx=20
BODY N xxxx=20 BODY N 23 xxxx=20
BODY N xxxxx=20 BODY N 31 xxxxx=20
BODY N xxxxxx=20 BODY N 40 xxxxxx=20
BODY N xxxxxxx=20 BODY N 50 xxxxxxx=20
BODY N xxxxxxxx=20 BODY N 61 xxxxxxxx=20
BODY N xxxxxxxxx=20 BODY N 73 xxxxxxxxx=20
BODY N xxxxxxxxxx=20 BODY N 86 xxxxxxxxxx=20
BODY N xxxxxxxxxxx=20 BODY N 100 xxxxxxxxxxx=20
BODY N xxxxxxxxxxxx=20 BODY N 115 xxxxxxxxxxxx=20
BODY N xxxxxxxxxxxxx=20 BODY N 131 xxxxxxxxxxxxx=20
BODY N xxxxxxxxxxxxxx=20 BODY N 148 xxxxxxxxxxxxxx=20
BODY N xxxxxxxxxxxxxxx=20 BODY N 166 xxxxxxxxxxxxxxx=20
BODY N xxxxxxxxxxxxxxxx=20 BODY N 185 xxxxxxxxxxxxxxxx=20
BODY N xxxxxxxxxxxxxxxxx=20 BODY N 205 xxxxxxxxxxxxxxxxx=20
BODY N xxxxxxxxxxxxxxxxxx=20 BODY N 226 xxxxxxxxxxxxxxxxxx=20
BODY N xxxxxxxxxxxxxxxxxxx=20 BODY N 248 xxxxxxxxxxxxxxxxxxx=20
BODY N xxxxxxxxxxxxxxxxxxxx=20 BODY N 271 xxxxxxxxxxxxxxxxxxxx=20
BODY N xxxxxxxxxxxxxxxxxxxxx=20 BODY N 295 xxxxxxxxxxxxxxxxxxxxx=20
BODY N xxxxxxxxxxxxxxxxxxxxxx=20 BODY N 320 xxxxxxxxxxxxxxxxxxxxxx=20
BODY N xxxxxxxxxxxxxxxxxxxxxxx=20 BODY N 346 xxxxxxxxxxxxxxxxxxxxxxx=20
BODY N xxxxxxxxxxxxxxxxxxxxxxxx=20 BODY N 373 xxxxxxxxxxxxxxxxxxxxxxxx=20
BODY N xxxxxxxxxxxxxxxxxxxxxxxxx=20 BODY N 401 xxxxxxxxxxxxxxxxxxxxxxxxx=20
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxx=20 BODY N 430 xxxxxxxxxxxxxxxxxxxxxxxxxx=20
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxx=20 BODY N 460 xxxxxxxxxxxxxxxxxxxxxxxxxxx=20
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxx=20 BODY N 491 xxxxxxxxxxxxxxxxxxxxxxxxxxxx=20
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxx=20 BODY N 523 xxxxxxxxxxxxxxxxxxxxxxxxxxxxx=20
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=20 BODY N 556 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=20
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=20 BODY N 590 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=20
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=20 BODY N 625 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=20
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=20 BODY N 661 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=20
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=20 BODY N 698 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=20
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=20 BODY N 736 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=20
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=20 BODY N 775 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=20
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=20 BODY N 815 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=20
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=20 BODY N 856 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=20
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=20 BODY N 898 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=20
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=20 BODY N 941 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=20
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=20 BODY N 985 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=20
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=20 BODY N 1030 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=20
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=20 BODY N 1076 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=20
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=20 BODY N 1123 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=20
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=20 BODY N 1171 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=20
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=20 BODY N 1220 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=20
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=20 BODY N 1270 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=20
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=20 BODY N 1321 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=20
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=20 BODY N 1373 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=20
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=20 BODY N 1426 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=20
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=20 BODY N 1480 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=20
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=20 BODY N 1535 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=20
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=20 BODY N 1591 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=20
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=20 BODY N 1648 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=20
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=20 BODY N 1706 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=20
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=20 BODY N 1765 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=20
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=20 BODY N 1825 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=20
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=20 BODY N 1886 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=20
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=20 BODY N 1948 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=20
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=20 BODY N 2011 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=20
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=20 BODY N 2075 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=20
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=20 BODY N 2140 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=20
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=20 BODY N 2206 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=20
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=20 BODY N 2273 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=20
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=20 BODY N 2341 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=20
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=20 BODY N 2410 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=20
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=20 BODY N 2480 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=20
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=20 BODY N 2551 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=20
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=20 BODY N 2623 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=20
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=20 BODY N 2696 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=20
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=20 BODY N 2770 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=20
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=20 BODY N 2845 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=20
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx= BODY N 2921 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
BODY N =20 BODY N 2996 =20
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx= BODY N 3000 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
BODY N x=20 BODY N 3075 x=20
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx= BODY N 3080 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
BODY N xx=20 BODY N 3155 xx=20
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx= BODY N 3161 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
BODY N xxx=20 BODY N 3236 xxx=20
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx= BODY N 3243 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
BODY N xxxx=20 BODY N 3318 xxxx=20
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx= BODY N 3326 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
BODY N xxxxx=20 BODY N 3401 xxxxx=20
BODY END BODY END

View File

@@ -1,93 +1,93 @@
MAIN mime-version: 1.0 MAIN 0 mime-version: 1.0
mime_state: header_token: text / plain mime_state: header_token: text / plain
MAIN content-type: text/plain MAIN 25 content-type: text/plain
mime_state: header_token: 8bit mime_state: header_token: 8bit
MAIN Content-Transfer-Encoding: quoted-printable MAIN 57 Content-Transfer-Encoding: quoted-printable
HEADER END HEADER END
BODY N BODY N 0
BODY N =09 BODY N 1 =09
BODY N x=09 BODY N 5 x=09
BODY N xx=09 BODY N 10 xx=09
BODY N xxx=09 BODY N 16 xxx=09
BODY N xxxx=09 BODY N 23 xxxx=09
BODY N xxxxx=09 BODY N 31 xxxxx=09
BODY N xxxxxx=09 BODY N 40 xxxxxx=09
BODY N xxxxxxx=09 BODY N 50 xxxxxxx=09
BODY N xxxxxxxx=09 BODY N 61 xxxxxxxx=09
BODY N xxxxxxxxx=09 BODY N 73 xxxxxxxxx=09
BODY N xxxxxxxxxx=09 BODY N 86 xxxxxxxxxx=09
BODY N xxxxxxxxxxx=09 BODY N 100 xxxxxxxxxxx=09
BODY N xxxxxxxxxxxx=09 BODY N 115 xxxxxxxxxxxx=09
BODY N xxxxxxxxxxxxx=09 BODY N 131 xxxxxxxxxxxxx=09
BODY N xxxxxxxxxxxxxx=09 BODY N 148 xxxxxxxxxxxxxx=09
BODY N xxxxxxxxxxxxxxx=09 BODY N 166 xxxxxxxxxxxxxxx=09
BODY N xxxxxxxxxxxxxxxx=09 BODY N 185 xxxxxxxxxxxxxxxx=09
BODY N xxxxxxxxxxxxxxxxx=09 BODY N 205 xxxxxxxxxxxxxxxxx=09
BODY N xxxxxxxxxxxxxxxxxx=09 BODY N 226 xxxxxxxxxxxxxxxxxx=09
BODY N xxxxxxxxxxxxxxxxxxx=09 BODY N 248 xxxxxxxxxxxxxxxxxxx=09
BODY N xxxxxxxxxxxxxxxxxxxx=09 BODY N 271 xxxxxxxxxxxxxxxxxxxx=09
BODY N xxxxxxxxxxxxxxxxxxxxx=09 BODY N 295 xxxxxxxxxxxxxxxxxxxxx=09
BODY N xxxxxxxxxxxxxxxxxxxxxx=09 BODY N 320 xxxxxxxxxxxxxxxxxxxxxx=09
BODY N xxxxxxxxxxxxxxxxxxxxxxx=09 BODY N 346 xxxxxxxxxxxxxxxxxxxxxxx=09
BODY N xxxxxxxxxxxxxxxxxxxxxxxx=09 BODY N 373 xxxxxxxxxxxxxxxxxxxxxxxx=09
BODY N xxxxxxxxxxxxxxxxxxxxxxxxx=09 BODY N 401 xxxxxxxxxxxxxxxxxxxxxxxxx=09
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxx=09 BODY N 430 xxxxxxxxxxxxxxxxxxxxxxxxxx=09
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxx=09 BODY N 460 xxxxxxxxxxxxxxxxxxxxxxxxxxx=09
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxx=09 BODY N 491 xxxxxxxxxxxxxxxxxxxxxxxxxxxx=09
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxx=09 BODY N 523 xxxxxxxxxxxxxxxxxxxxxxxxxxxxx=09
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=09 BODY N 556 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=09
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=09 BODY N 590 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=09
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=09 BODY N 625 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=09
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=09 BODY N 661 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=09
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=09 BODY N 698 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=09
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=09 BODY N 736 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=09
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=09 BODY N 775 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=09
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=09 BODY N 815 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=09
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=09 BODY N 856 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=09
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=09 BODY N 898 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=09
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=09 BODY N 941 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=09
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=09 BODY N 985 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=09
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=09 BODY N 1030 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=09
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=09 BODY N 1076 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=09
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=09 BODY N 1123 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=09
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=09 BODY N 1171 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=09
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=09 BODY N 1220 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=09
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=09 BODY N 1270 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=09
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=09 BODY N 1321 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=09
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=09 BODY N 1373 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=09
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=09 BODY N 1426 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=09
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=09 BODY N 1480 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=09
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=09 BODY N 1535 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=09
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=09 BODY N 1591 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=09
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=09 BODY N 1648 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=09
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=09 BODY N 1706 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=09
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=09 BODY N 1765 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=09
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=09 BODY N 1825 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=09
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=09 BODY N 1886 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=09
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=09 BODY N 1948 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=09
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=09 BODY N 2011 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=09
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=09 BODY N 2075 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=09
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=09 BODY N 2140 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=09
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=09 BODY N 2206 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=09
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=09 BODY N 2273 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=09
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=09 BODY N 2341 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=09
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=09 BODY N 2410 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=09
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=09 BODY N 2480 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=09
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=09 BODY N 2551 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=09
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=09 BODY N 2623 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=09
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=09 BODY N 2696 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=09
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=09 BODY N 2770 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=09
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=09 BODY N 2845 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=09
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx= BODY N 2921 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
BODY N =09 BODY N 2996 =09
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx= BODY N 3000 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
BODY N x=09 BODY N 3075 x=09
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx= BODY N 3080 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
BODY N xx=09 BODY N 3155 xx=09
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx= BODY N 3161 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
BODY N xxx=09 BODY N 3236 xxx=09
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx= BODY N 3243 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
BODY N xxxx=09 BODY N 3318 xxxx=09
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx= BODY N 3326 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
BODY N xxxxx=09 BODY N 3401 xxxxx=09
BODY END BODY END

View File

@@ -1,93 +1,93 @@
MAIN mime-version: 1.0 MAIN 0 mime-version: 1.0
mime_state: header_token: text / plain mime_state: header_token: text / plain
MAIN content-type: text/plain MAIN 25 content-type: text/plain
mime_state: header_token: 8bit mime_state: header_token: 8bit
MAIN Content-Transfer-Encoding: quoted-printable MAIN 57 Content-Transfer-Encoding: quoted-printable
HEADER END HEADER END
BODY N BODY N 0
BODY N =01 BODY N 1 =01
BODY N x=01 BODY N 5 x=01
BODY N xx=01 BODY N 10 xx=01
BODY N xxx=01 BODY N 16 xxx=01
BODY N xxxx=01 BODY N 23 xxxx=01
BODY N xxxxx=01 BODY N 31 xxxxx=01
BODY N xxxxxx=01 BODY N 40 xxxxxx=01
BODY N xxxxxxx=01 BODY N 50 xxxxxxx=01
BODY N xxxxxxxx=01 BODY N 61 xxxxxxxx=01
BODY N xxxxxxxxx=01 BODY N 73 xxxxxxxxx=01
BODY N xxxxxxxxxx=01 BODY N 86 xxxxxxxxxx=01
BODY N xxxxxxxxxxx=01 BODY N 100 xxxxxxxxxxx=01
BODY N xxxxxxxxxxxx=01 BODY N 115 xxxxxxxxxxxx=01
BODY N xxxxxxxxxxxxx=01 BODY N 131 xxxxxxxxxxxxx=01
BODY N xxxxxxxxxxxxxx=01 BODY N 148 xxxxxxxxxxxxxx=01
BODY N xxxxxxxxxxxxxxx=01 BODY N 166 xxxxxxxxxxxxxxx=01
BODY N xxxxxxxxxxxxxxxx=01 BODY N 185 xxxxxxxxxxxxxxxx=01
BODY N xxxxxxxxxxxxxxxxx=01 BODY N 205 xxxxxxxxxxxxxxxxx=01
BODY N xxxxxxxxxxxxxxxxxx=01 BODY N 226 xxxxxxxxxxxxxxxxxx=01
BODY N xxxxxxxxxxxxxxxxxxx=01 BODY N 248 xxxxxxxxxxxxxxxxxxx=01
BODY N xxxxxxxxxxxxxxxxxxxx=01 BODY N 271 xxxxxxxxxxxxxxxxxxxx=01
BODY N xxxxxxxxxxxxxxxxxxxxx=01 BODY N 295 xxxxxxxxxxxxxxxxxxxxx=01
BODY N xxxxxxxxxxxxxxxxxxxxxx=01 BODY N 320 xxxxxxxxxxxxxxxxxxxxxx=01
BODY N xxxxxxxxxxxxxxxxxxxxxxx=01 BODY N 346 xxxxxxxxxxxxxxxxxxxxxxx=01
BODY N xxxxxxxxxxxxxxxxxxxxxxxx=01 BODY N 373 xxxxxxxxxxxxxxxxxxxxxxxx=01
BODY N xxxxxxxxxxxxxxxxxxxxxxxxx=01 BODY N 401 xxxxxxxxxxxxxxxxxxxxxxxxx=01
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxx=01 BODY N 430 xxxxxxxxxxxxxxxxxxxxxxxxxx=01
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxx=01 BODY N 460 xxxxxxxxxxxxxxxxxxxxxxxxxxx=01
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxx=01 BODY N 491 xxxxxxxxxxxxxxxxxxxxxxxxxxxx=01
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxx=01 BODY N 523 xxxxxxxxxxxxxxxxxxxxxxxxxxxxx=01
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=01 BODY N 556 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=01
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=01 BODY N 590 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=01
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=01 BODY N 625 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=01
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=01 BODY N 661 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=01
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=01 BODY N 698 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=01
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=01 BODY N 736 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=01
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=01 BODY N 775 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=01
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=01 BODY N 815 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=01
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=01 BODY N 856 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=01
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=01 BODY N 898 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=01
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=01 BODY N 941 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=01
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=01 BODY N 985 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=01
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=01 BODY N 1030 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=01
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=01 BODY N 1076 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=01
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=01 BODY N 1123 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=01
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=01 BODY N 1171 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=01
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=01 BODY N 1220 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=01
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=01 BODY N 1270 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=01
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=01 BODY N 1321 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=01
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=01 BODY N 1373 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=01
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=01 BODY N 1426 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=01
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=01 BODY N 1480 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=01
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=01 BODY N 1535 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=01
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=01 BODY N 1591 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=01
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=01 BODY N 1648 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=01
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=01 BODY N 1706 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=01
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=01 BODY N 1765 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=01
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=01 BODY N 1825 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=01
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=01 BODY N 1886 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=01
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=01 BODY N 1948 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=01
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=01 BODY N 2011 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=01
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=01 BODY N 2075 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=01
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=01 BODY N 2140 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=01
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=01 BODY N 2206 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=01
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=01 BODY N 2273 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=01
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=01 BODY N 2341 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=01
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=01 BODY N 2410 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=01
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=01 BODY N 2480 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=01
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=01 BODY N 2551 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=01
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=01 BODY N 2623 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=01
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=01 BODY N 2696 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=01
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=01 BODY N 2770 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=01
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=01 BODY N 2845 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=01
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx= BODY N 2921 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
BODY N =01 BODY N 2996 =01
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx= BODY N 3000 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
BODY N x=01 BODY N 3075 x=01
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx= BODY N 3080 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
BODY N xx=01 BODY N 3155 xx=01
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx= BODY N 3161 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
BODY N xxx=01 BODY N 3236 xxx=01
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx= BODY N 3243 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
BODY N xxxx=01 BODY N 3318 xxxx=01
BODY N xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx= BODY N 3326 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
BODY N xxxxx=01 BODY N 3401 xxxxx=01
BODY END BODY END

View File

@@ -1,7 +1,7 @@
mime_state: header_token: message / rfc822 mime_state: header_token: message / rfc822
MAIN content-type: message/rfc822 MAIN 0 content-type: message/rfc822
mime_state: header_token: base64 mime_state: header_token: base64
MAIN content-transfer-encoding: base64 MAIN 34 content-transfer-encoding: base64
HEADER END HEADER END
mime_state: warning: invalid message/* or multipart/* encoding domain: base64 mime_state: warning: invalid message/* or multipart/* encoding domain: base64
BODY END BODY END

View File

@@ -1,142 +1,142 @@
mime_state: header_token: multipart / mixed mime_state: header_token: multipart / mixed
mime_state: header_token: boundary = foobar mime_state: header_token: boundary = foobar
mime_state: PUSH boundary foobar mime_state: PUSH boundary foobar
MAIN content-type: multipart/mixed; boundary=foobar MAIN 0 content-type: multipart/mixed; boundary=foobar
HEADER END HEADER END
BODY N BODY N 0
BODY N --foobar BODY N 1 --foobar
mime_state: header_token: multipart / mixed mime_state: header_token: multipart / mixed
mime_state: header_token: boundary = foobar mime_state: header_token: boundary = foobar
mime_state: PUSH boundary foobar mime_state: PUSH boundary foobar
MULT content-type: multipart/mixed; boundary=foobar MULT 0 content-type: multipart/mixed; boundary=foobar
BODY N BODY N 0
BODY N --foobar BODY N 1 --foobar
mime_state: header_token: multipart / mixed mime_state: header_token: multipart / mixed
mime_state: header_token: boundary = foobar mime_state: header_token: boundary = foobar
mime_state: PUSH boundary foobar mime_state: PUSH boundary foobar
MULT content-type: multipart/mixed; boundary=foobar MULT 0 content-type: multipart/mixed; boundary=foobar
BODY N BODY N 0
BODY N --foobar BODY N 1 --foobar
mime_state: header_token: multipart / mixed mime_state: header_token: multipart / mixed
mime_state: header_token: boundary = foobar mime_state: header_token: boundary = foobar
mime_state: PUSH boundary foobar mime_state: PUSH boundary foobar
MULT content-type: multipart/mixed; boundary=foobar MULT 0 content-type: multipart/mixed; boundary=foobar
BODY N BODY N 0
BODY N --foobar BODY N 1 --foobar
mime_state: header_token: multipart / mixed mime_state: header_token: multipart / mixed
mime_state: header_token: boundary = foobar mime_state: header_token: boundary = foobar
mime_state: PUSH boundary foobar mime_state: PUSH boundary foobar
MULT content-type: multipart/mixed; boundary=foobar MULT 0 content-type: multipart/mixed; boundary=foobar
BODY N BODY N 0
BODY N --foobar BODY N 1 --foobar
mime_state: header_token: multipart / mixed mime_state: header_token: multipart / mixed
mime_state: header_token: boundary = foobar mime_state: header_token: boundary = foobar
mime_state: PUSH boundary foobar mime_state: PUSH boundary foobar
MULT content-type: multipart/mixed; boundary=foobar MULT 0 content-type: multipart/mixed; boundary=foobar
BODY N BODY N 0
BODY N --foobar BODY N 1 --foobar
mime_state: header_token: multipart / mixed mime_state: header_token: multipart / mixed
mime_state: header_token: boundary = foobar mime_state: header_token: boundary = foobar
mime_state: PUSH boundary foobar mime_state: PUSH boundary foobar
MULT content-type: multipart/mixed; boundary=foobar MULT 0 content-type: multipart/mixed; boundary=foobar
BODY N BODY N 0
BODY N --foobar BODY N 1 --foobar
mime_state: header_token: multipart / mixed mime_state: header_token: multipart / mixed
mime_state: header_token: boundary = foobar mime_state: header_token: boundary = foobar
mime_state: PUSH boundary foobar mime_state: PUSH boundary foobar
MULT content-type: multipart/mixed; boundary=foobar MULT 0 content-type: multipart/mixed; boundary=foobar
BODY N BODY N 0
BODY N --foobar BODY N 1 --foobar
mime_state: header_token: multipart / mixed mime_state: header_token: multipart / mixed
mime_state: header_token: boundary = foobar mime_state: header_token: boundary = foobar
mime_state: PUSH boundary foobar mime_state: PUSH boundary foobar
MULT content-type: multipart/mixed; boundary=foobar MULT 0 content-type: multipart/mixed; boundary=foobar
BODY N BODY N 0
BODY N --foobar BODY N 1 --foobar
mime_state: header_token: multipart / mixed mime_state: header_token: multipart / mixed
mime_state: header_token: boundary = foobar mime_state: header_token: boundary = foobar
mime_state: PUSH boundary foobar mime_state: PUSH boundary foobar
MULT content-type: multipart/mixed; boundary=foobar MULT 0 content-type: multipart/mixed; boundary=foobar
BODY N BODY N 0
BODY N --foobar BODY N 1 --foobar
mime_state: header_token: multipart / mixed mime_state: header_token: multipart / mixed
mime_state: header_token: boundary = foobar mime_state: header_token: boundary = foobar
mime_state: PUSH boundary foobar mime_state: PUSH boundary foobar
MULT content-type: multipart/mixed; boundary=foobar MULT 0 content-type: multipart/mixed; boundary=foobar
BODY N BODY N 0
BODY N --foobar BODY N 1 --foobar
mime_state: header_token: multipart / mixed mime_state: header_token: multipart / mixed
mime_state: header_token: boundary = foobar mime_state: header_token: boundary = foobar
mime_state: PUSH boundary foobar mime_state: PUSH boundary foobar
MULT content-type: multipart/mixed; boundary=foobar MULT 0 content-type: multipart/mixed; boundary=foobar
BODY N BODY N 0
BODY N --foobar BODY N 1 --foobar
mime_state: header_token: multipart / mixed mime_state: header_token: multipart / mixed
mime_state: header_token: boundary = foobar mime_state: header_token: boundary = foobar
mime_state: PUSH boundary foobar mime_state: PUSH boundary foobar
MULT content-type: multipart/mixed; boundary=foobar MULT 0 content-type: multipart/mixed; boundary=foobar
BODY N BODY N 0
BODY N --foobar BODY N 1 --foobar
mime_state: header_token: multipart / mixed mime_state: header_token: multipart / mixed
mime_state: header_token: boundary = foobar mime_state: header_token: boundary = foobar
mime_state: PUSH boundary foobar mime_state: PUSH boundary foobar
MULT content-type: multipart/mixed; boundary=foobar MULT 0 content-type: multipart/mixed; boundary=foobar
BODY N BODY N 0
BODY N --foobar BODY N 1 --foobar
mime_state: header_token: multipart / mixed mime_state: header_token: multipart / mixed
mime_state: header_token: boundary = foobar mime_state: header_token: boundary = foobar
mime_state: PUSH boundary foobar mime_state: PUSH boundary foobar
MULT content-type: multipart/mixed; boundary=foobar MULT 0 content-type: multipart/mixed; boundary=foobar
BODY N BODY N 0
BODY N --foobar BODY N 1 --foobar
mime_state: header_token: multipart / mixed mime_state: header_token: multipart / mixed
mime_state: header_token: boundary = foobar mime_state: header_token: boundary = foobar
mime_state: PUSH boundary foobar mime_state: PUSH boundary foobar
MULT content-type: multipart/mixed; boundary=foobar MULT 0 content-type: multipart/mixed; boundary=foobar
BODY N BODY N 0
BODY N --foobar BODY N 1 --foobar
mime_state: header_token: multipart / mixed mime_state: header_token: multipart / mixed
mime_state: header_token: boundary = foobar mime_state: header_token: boundary = foobar
mime_state: PUSH boundary foobar mime_state: PUSH boundary foobar
MULT content-type: multipart/mixed; boundary=foobar MULT 0 content-type: multipart/mixed; boundary=foobar
BODY N BODY N 0
BODY N --foobar BODY N 1 --foobar
mime_state: header_token: multipart / mixed mime_state: header_token: multipart / mixed
mime_state: header_token: boundary = foobar mime_state: header_token: boundary = foobar
mime_state: PUSH boundary foobar mime_state: PUSH boundary foobar
MULT content-type: multipart/mixed; boundary=foobar MULT 0 content-type: multipart/mixed; boundary=foobar
BODY N BODY N 0
BODY N --foobar BODY N 1 --foobar
mime_state: header_token: multipart / mixed mime_state: header_token: multipart / mixed
mime_state: header_token: boundary = foobar mime_state: header_token: boundary = foobar
mime_state: PUSH boundary foobar mime_state: PUSH boundary foobar
MULT content-type: multipart/mixed; boundary=foobar MULT 0 content-type: multipart/mixed; boundary=foobar
BODY N BODY N 0
BODY N --foobar BODY N 1 --foobar
mime_state: header_token: multipart / mixed mime_state: header_token: multipart / mixed
mime_state: header_token: boundary = foobar mime_state: header_token: boundary = foobar
mime_state: PUSH boundary foobar mime_state: PUSH boundary foobar
MULT content-type: multipart/mixed; boundary=foobar MULT 0 content-type: multipart/mixed; boundary=foobar
BODY N BODY N 0
BODY N --foobar BODY N 1 --foobar
mime_state: header_token: multipart / mixed mime_state: header_token: multipart / mixed
mime_state: header_token: boundary = foobar mime_state: header_token: boundary = foobar
mime_state: PUSH boundary foobar mime_state: PUSH boundary foobar
MULT content-type: multipart/mixed; boundary=foobar MULT 0 content-type: multipart/mixed; boundary=foobar
BODY N BODY N 0
BODY N --foobar BODY N 1 --foobar
mime_state: header_token: multipart / mixed mime_state: header_token: multipart / mixed
mime_state: header_token: boundary = foobar mime_state: header_token: boundary = foobar
mime_state: PUSH boundary foobar mime_state: PUSH boundary foobar
MULT content-type: multipart/mixed; boundary=foobar MULT 0 content-type: multipart/mixed; boundary=foobar
BODY N BODY N 0
BODY N --foobar BODY N 1 --foobar
mime_state: header_token: multipart / mixed mime_state: header_token: multipart / mixed
mime_state: header_token: boundary = foobar mime_state: header_token: boundary = foobar
mime_state: warning: MIME nesting exceeds safety limit: content-type: multipart/mixed; boundary=foobar mime_state: warning: MIME nesting exceeds safety limit: content-type: multipart/mixed; boundary=foobar
MULT content-type: multipart/mixed; boundary=foobar MULT 0 content-type: multipart/mixed; boundary=foobar
BODY N BODY N 0
BODY N --foobar BODY N 1 --foobar
BODY END BODY END
mime_state: warning: MIME nesting exceeds safety limit mime_state: warning: MIME nesting exceeds safety limit
mime_state: POP boundary foobar mime_state: POP boundary foobar

View File

@@ -11,12 +11,14 @@
/* err_print, context) /* err_print, context)
/* int flags; /* int flags;
/* void (*head_out)(void *ptr, int header_class, /* void (*head_out)(void *ptr, int header_class,
/* HEADER_OPTS *header_info, VSTRING *buf); /* HEADER_OPTS *header_info,
/* VSTRING *buf, off_t offset);
/* void (*head_end)(void *ptr); /* void (*head_end)(void *ptr);
/* void (*body_out)(void *ptr, int rec_type, /* void (*body_out)(void *ptr, int rec_type,
/* const char *buf, int len); /* const char *buf, int len,
/* off_t offset);
/* void (*body_end)(void *ptr); /* void (*body_end)(void *ptr);
/* void (*err_print(void *ptr, int err_flag, const char *text) /* void (*err_print)(void *ptr, int err_flag, const char *text)
/* void *context; /* void *context;
/* /*
/* int mime_state_update(state, rec_type, buf, len) /* int mime_state_update(state, rec_type, buf, len)
@@ -152,6 +154,9 @@
/* the last message header in the first header block is processed. /* the last message header in the first header block is processed.
/* .IP len /* .IP len
/* Length of non-VSTRING input buffer. /* Length of non-VSTRING input buffer.
/* .IP offset
/* The offset in bytes from the start of the current block of message
/* headers or body lines. Line boundaries are counted as one byte.
/* .IP rec_type /* .IP rec_type
/* The input record type as defined in rec_type(3h). State is /* The input record type as defined in rec_type(3h). State is
/* updated for text records (REC_TYPE_NORM or REC_TYPE_CONT). /* updated for text records (REC_TYPE_NORM or REC_TYPE_CONT).
@@ -274,6 +279,8 @@ struct MIME_STATE {
HEADER_TOKEN token[MIME_MAX_TOKEN]; /* header token array */ HEADER_TOKEN token[MIME_MAX_TOKEN]; /* header token array */
VSTRING *token_buffer; /* header parser scratch buffer */ VSTRING *token_buffer; /* header parser scratch buffer */
int err_flags; /* processing errors */ int err_flags; /* processing errors */
off_t head_offset; /* offset in header block */
off_t body_offset; /* offset in body block */
/* /*
* Static members. * Static members.
@@ -316,6 +323,18 @@ struct MIME_STATE {
(ptr)->curr_stype = (stype); \ (ptr)->curr_stype = (stype); \
(ptr)->curr_encoding = (encoding); \ (ptr)->curr_encoding = (encoding); \
(ptr)->curr_domain = (domain); \ (ptr)->curr_domain = (domain); \
if ((state) == MIME_STATE_BODY) \
(ptr)->body_offset = 0; \
else \
(ptr)->head_offset = 0; \
} while (0)
#define SET_CURR_STATE(ptr, state) do { \
(ptr)->curr_state = (state); \
if ((state) == MIME_STATE_BODY) \
(ptr)->body_offset = 0; \
else \
(ptr)->head_offset = 0; \
} while (0) } while (0)
/* /*
@@ -364,6 +383,22 @@ static MIME_ENCODING mime_encoding_map[] = { /* RFC 2045 */
} \ } \
} while (0) } while (0)
/*
* Outputs and state changes are interleaved, so we must maintain separate
* offsets for header and body segments.
*/
#define HEAD_OUT(ptr, info) do { \
(ptr)->head_out((ptr)->app_context, (ptr)->curr_state, \
(info), (ptr)->output_buffer, (ptr)->head_offset); \
(ptr)->head_offset += (len) + 1; \
} while(0)
#define BODY_OUT(ptr, rec_type, text, len) do { \
(ptr)->body_out((ptr)->app_context, (rec_type), \
(text), (len), (ptr)->body_offset); \
(ptr)->body_offset += (len) + 1; \
} while(0)
/* mime_state_push - push boundary onto stack */ /* mime_state_push - push boundary onto stack */
static void mime_state_push(MIME_STATE *state, int def_ctype, int def_stype, static void mime_state_push(MIME_STATE *state, int def_ctype, int def_stype,
@@ -635,9 +670,9 @@ static void mime_state_downgrade(MIME_STATE *state, int rec_type,
if (LEN(state->output_buffer) > 72) { if (LEN(state->output_buffer) > 72) {
VSTRING_ADDCH(state->output_buffer, '='); VSTRING_ADDCH(state->output_buffer, '=');
VSTRING_TERMINATE(state->output_buffer); VSTRING_TERMINATE(state->output_buffer);
state->body_out(state->app_context, REC_TYPE_NORM, BODY_OUT(state, REC_TYPE_NORM,
STR(state->output_buffer), STR(state->output_buffer),
LEN(state->output_buffer)); LEN(state->output_buffer));
VSTRING_RESET(state->output_buffer); VSTRING_RESET(state->output_buffer);
} }
/* Append the next character. */ /* Append the next character. */
@@ -662,9 +697,9 @@ static void mime_state_downgrade(MIME_STATE *state, int rec_type,
QP_ENCODE(state->output_buffer, ch); QP_ENCODE(state->output_buffer, ch);
} }
VSTRING_TERMINATE(state->output_buffer); VSTRING_TERMINATE(state->output_buffer);
state->body_out(state->app_context, REC_TYPE_NORM, BODY_OUT(state, REC_TYPE_NORM,
STR(state->output_buffer), STR(state->output_buffer),
LEN(state->output_buffer)); LEN(state->output_buffer));
VSTRING_RESET(state->output_buffer); VSTRING_RESET(state->output_buffer);
} }
} }
@@ -770,8 +805,7 @@ int mime_state_update(MIME_STATE *state, int rec_type,
|| header_info->type != HDR_CONTENT_TRANSFER_ENCODING || header_info->type != HDR_CONTENT_TRANSFER_ENCODING
|| (state->static_flags & MIME_OPT_DOWNGRADE) == 0 || (state->static_flags & MIME_OPT_DOWNGRADE) == 0
|| state->curr_domain == MIME_ENC_7BIT) || state->curr_domain == MIME_ENC_7BIT)
state->head_out(state->app_context, state->curr_state, HEAD_OUT(state, header_info);
header_info, state->output_buffer);
state->prev_rec_type = 0; state->prev_rec_type = 0;
VSTRING_RESET(state->output_buffer); VSTRING_RESET(state->output_buffer);
} }
@@ -821,8 +855,7 @@ int mime_state_update(MIME_STATE *state, int rec_type,
cp = CU_CHAR_PTR("quoted-printable"); cp = CU_CHAR_PTR("quoted-printable");
vstring_sprintf(state->output_buffer, vstring_sprintf(state->output_buffer,
"Content-Transfer-Encoding: %s", cp); "Content-Transfer-Encoding: %s", cp);
state->head_out(state->app_context, state->curr_state, HEAD_OUT(state, (HEADER_OPTS *) 0);
0, state->output_buffer);
VSTRING_RESET(state->output_buffer); VSTRING_RESET(state->output_buffer);
} }
@@ -862,9 +895,13 @@ int mime_state_update(MIME_STATE *state, int rec_type,
* agressive mode, examine headers of partial and external-body * agressive mode, examine headers of partial and external-body
* messages. Otherwise, treat such headers as part of the "body". Set * messages. Otherwise, treat such headers as part of the "body". Set
* the proper encoding information for the multipart prolog. * the proper encoding information for the multipart prolog.
*
* XXX This changes state to MIME_STATE_NESTED and then outputs a body
* line, so that the body offset is not properly reset.
*/ */
if (input_is_text) { if (input_is_text) {
if (*text == 0) { if (*text == 0) {
state->body_offset = 0; /* XXX */
if (state->curr_ctype == MIME_CTYPE_MESSAGE) { if (state->curr_ctype == MIME_CTYPE_MESSAGE) {
if (state->curr_stype == MIME_STYPE_RFC822 if (state->curr_stype == MIME_STYPE_RFC822
|| (state->static_flags & MIME_OPT_RECURSE_ALL_MESSAGE)) || (state->static_flags & MIME_OPT_RECURSE_ALL_MESSAGE))
@@ -872,13 +909,13 @@ int mime_state_update(MIME_STATE *state, int rec_type,
MIME_CTYPE_TEXT, MIME_STYPE_PLAIN, MIME_CTYPE_TEXT, MIME_STYPE_PLAIN,
MIME_ENC_7BIT, MIME_ENC_7BIT); MIME_ENC_7BIT, MIME_ENC_7BIT);
else else
state->curr_state = MIME_STATE_BODY; SET_CURR_STATE(state, MIME_STATE_BODY);
} else if (state->curr_ctype == MIME_CTYPE_MULTIPART) { } else if (state->curr_ctype == MIME_CTYPE_MULTIPART) {
SET_MIME_STATE(state, MIME_STATE_BODY, SET_MIME_STATE(state, MIME_STATE_BODY,
MIME_CTYPE_OTHER, MIME_STYPE_OTHER, MIME_CTYPE_OTHER, MIME_STYPE_OTHER,
MIME_ENC_7BIT, MIME_ENC_7BIT); MIME_ENC_7BIT, MIME_ENC_7BIT);
} else { } else {
state->curr_state = MIME_STATE_BODY; SET_CURR_STATE(state, MIME_STATE_BODY);
} }
} }
@@ -887,8 +924,8 @@ int mime_state_update(MIME_STATE *state, int rec_type,
* body state, leaving all other state alone. * body state, leaving all other state alone.
*/ */
else { else {
state->body_out(state->app_context, REC_TYPE_NORM, "", 0); SET_CURR_STATE(state, MIME_STATE_BODY);
state->curr_state = MIME_STATE_BODY; BODY_OUT(state, REC_TYPE_NORM, "", 0);
} }
} }
@@ -896,7 +933,7 @@ int mime_state_update(MIME_STATE *state, int rec_type,
* This input is not text. Go to body state, unconditionally. * This input is not text. Go to body state, unconditionally.
*/ */
else { else {
state->curr_state = MIME_STATE_BODY; SET_CURR_STATE(state, MIME_STATE_BODY);
} }
/* FALLTHROUGH */ /* FALLTHROUGH */
@@ -957,7 +994,7 @@ int mime_state_update(MIME_STATE *state, int rec_type,
&& state->curr_domain != MIME_ENC_7BIT) && state->curr_domain != MIME_ENC_7BIT)
mime_state_downgrade(state, rec_type, text, len); mime_state_downgrade(state, rec_type, text, len);
else else
state->body_out(state->app_context, rec_type, text, len); BODY_OUT(state, rec_type, text, len);
} }
/* /*
@@ -1013,15 +1050,15 @@ const char *mime_state_error(int error_code)
#define REC_LEN 1024 #define REC_LEN 1024
static void head_out(void *context, int class, HEADER_OPTS *unused_info, static void head_out(void *context, int class, HEADER_OPTS *unused_info,
VSTRING *buf) VSTRING *buf, off_t offset)
{ {
VSTREAM *stream = (VSTREAM *) context; VSTREAM *stream = (VSTREAM *) context;
vstream_fprintf(stream, "%s\t%s\n", vstream_fprintf(stream, "%s %ld\t%s\n",
class == MIME_HDR_PRIMARY ? "MAIN" : class == MIME_HDR_PRIMARY ? "MAIN" :
class == MIME_HDR_MULTIPART ? "MULT" : class == MIME_HDR_MULTIPART ? "MULT" :
class == MIME_HDR_NESTED ? "NEST" : class == MIME_HDR_NESTED ? "NEST" :
"ERROR", STR(buf)); "ERROR", (long) offset, STR(buf));
} }
static void head_end(void *context) static void head_end(void *context)
@@ -1031,11 +1068,12 @@ static void head_end(void *context)
vstream_fprintf(stream, "HEADER END\n"); vstream_fprintf(stream, "HEADER END\n");
} }
static void body_out(void *context, int rec_type, const char *buf, int len) static void body_out(void *context, int rec_type, const char *buf, int len,
off_t offset)
{ {
VSTREAM *stream = (VSTREAM *) context; VSTREAM *stream = (VSTREAM *) context;
vstream_fprintf(stream, "BODY %c\t", rec_type); vstream_fprintf(stream, "BODY %c %ld\t", rec_type, (long) offset);
vstream_fwrite(stream, buf, len); vstream_fwrite(stream, buf, len);
if (rec_type == REC_TYPE_NORM) if (rec_type == REC_TYPE_NORM)
VSTREAM_PUTC('\n', stream); VSTREAM_PUTC('\n', stream);

View File

@@ -25,8 +25,8 @@
* External interface. All MIME_STATE structure members are private. * External interface. All MIME_STATE structure members are private.
*/ */
typedef struct MIME_STATE MIME_STATE; typedef struct MIME_STATE MIME_STATE;
typedef void (*MIME_STATE_HEAD_OUT) (void *, int, HEADER_OPTS *, VSTRING *); typedef void (*MIME_STATE_HEAD_OUT) (void *, int, HEADER_OPTS *, VSTRING *, off_t);
typedef void (*MIME_STATE_BODY_OUT) (void *, int, const char *, int); typedef void (*MIME_STATE_BODY_OUT) (void *, int, const char *, int, off_t);
typedef void (*MIME_STATE_ANY_END) (void *); typedef void (*MIME_STATE_ANY_END) (void *);
typedef void (*MIME_STATE_ERR_PRINT) (void *, int, const char *); typedef void (*MIME_STATE_ERR_PRINT) (void *, int, const char *);

View File

@@ -1,52 +1,52 @@
MAIN subject: primary subject MAIN 0 subject: primary subject
mime_state: header_token: multipart / mumble mime_state: header_token: multipart / mumble
mime_state: header_token: boundary = abcd ef mime_state: header_token: boundary = abcd ef
mime_state: PUSH boundary abcd ef mime_state: PUSH boundary abcd ef
MAIN content-type: multipart/(co\m\)ment)mumble mumble; boundary = "ab\cd MAIN 71 content-type: multipart/(co\m\)ment)mumble mumble; boundary = "ab\cd
ef" mumble ef" mumble
HEADER END HEADER END
BODY N BODY N 0
BODY N abcdef prolog BODY N 1 abcdef prolog
BODY N BODY N 15
BODY N --abcd ef BODY N 16 --abcd ef
mime_state: header_token: message / rfc822 mime_state: header_token: message / rfc822
MULT content-type: message/rfc822; mumble MULT 0 content-type: message/rfc822; mumble
BODY N BODY N 0
NEST subject: nested subject NEST 0 subject: nested subject
mime_state: header_token: multipart / mumble mime_state: header_token: multipart / mumble
mime_state: header_token: boundary = pqrs mime_state: header_token: boundary = pqrs
mime_state: PUSH boundary pqrs mime_state: PUSH boundary pqrs
NEST content-type: multipart/mumble; boundary(comment)="pqrs" NEST 57 content-type: multipart/mumble; boundary(comment)="pqrs"
mime_state: header_token: base64 mime_state: header_token: base64
NEST content-transfer-encoding: base64 NEST 91 content-transfer-encoding: base64
mime_state: warning: invalid message/* or multipart/* encoding domain: base64 mime_state: warning: invalid message/* or multipart/* encoding domain: base64
BODY N BODY N 0
BODY N pqrs prolog BODY N 1 pqrs prolog
BODY N BODY N 13
BODY N --pqrs BODY N 14 --pqrs
MULT header: pqrs part 01 MULT 0 header: pqrs part 01
BODY N BODY N 0
BODY N body pqrs part 01 BODY N 1 body pqrs part 01
BODY N BODY N 19
BODY N --pqrs BODY N 20 --pqrs
MULT header: pqrs part 02 MULT 0 header: pqrs part 02
BODY N BODY N 0
BODY N body pqrs part 02 BODY N 1 body pqrs part 02
BODY N BODY N 19
BODY N --bogus-boundary BODY N 20 --bogus-boundary
BODY N header: wietse BODY N 37 header: wietse
BODY N BODY N 52
BODY N body asdasads BODY N 53 body asdasads
BODY N BODY N 67
mime_state: POP boundary pqrs mime_state: POP boundary pqrs
BODY N --abcd ef BODY N 68 --abcd ef
MULT header: abcdef part 02 MULT 0 header: abcdef part 02
BODY N BODY N 0
BODY N body abcdef part 02 BODY N 1 body abcdef part 02
BODY N BODY N 21
mime_state: POP boundary abcd ef mime_state: POP boundary abcd ef
BODY N --abcd ef-- BODY N 0 --abcd ef--
BODY N BODY N 12
BODY N epilog BODY N 13 epilog
BODY END BODY END
mime_state: warning: improper message/* or multipart/* encoding domain mime_state: warning: improper message/* or multipart/* encoding domain

View File

@@ -1,5 +1,5 @@
mime_state: warning: message header length exceeds safety limit: Header: ??garbage garbage garbage garbage garbage garbage garbage garbage garbage ??garbage garbage mime_state: warning: message header length exceeds safety limit: Header: ??garbage garbage garbage garbage garbage garbage garbage garbage garbage ??garbage garbage
MAIN Header: MAIN 0 Header:
garbage garbage garbage garbage garbage garbage garbage garbage garbage garbage garbage garbage garbage garbage garbage garbage garbage garbage
garbage garbage garbage garbage garbage garbage garbage garbage garbage garbage garbage garbage garbage garbage garbage garbage garbage garbage
garbage garbage garbage garbage garbage garbage garbage garbage garbage garbage garbage garbage garbage garbage garbage garbage garbage garbage

View File

@@ -288,7 +288,8 @@ int smtp_helo(SMTP_STATE *state)
/* smtp_text_out - output one header/body record */ /* smtp_text_out - output one header/body record */
static void smtp_text_out(void *context, int rec_type, static void smtp_text_out(void *context, int rec_type,
const char *text, int len) const char *text, int len,
off_t unused_offset)
{ {
SMTP_STATE *state = (SMTP_STATE *) context; SMTP_STATE *state = (SMTP_STATE *) context;
SMTP_SESSION *session = state->session; SMTP_SESSION *session = state->session;
@@ -333,7 +334,8 @@ static void smtp_text_out(void *context, int rec_type,
/* smtp_header_out - output one message header */ /* smtp_header_out - output one message header */
static void smtp_header_out(void *context, int unused_header_class, static void smtp_header_out(void *context, int unused_header_class,
HEADER_OPTS *unused_info, VSTRING *buf) HEADER_OPTS *unused_info, VSTRING *buf,
off_t offset)
{ {
char *start = vstring_str(buf); char *start = vstring_str(buf);
char *line; char *line;
@@ -342,7 +344,7 @@ static void smtp_header_out(void *context, int unused_header_class,
for (line = start; line; line = next_line) { for (line = start; line; line = next_line) {
next_line = split_at(line, '\n'); next_line = split_at(line, '\n');
smtp_text_out(context, REC_TYPE_NORM, line, next_line ? smtp_text_out(context, REC_TYPE_NORM, line, next_line ?
next_line - line - 1 : strlen(line)); next_line - line - 1 : strlen(line), offset);
} }
} }
@@ -799,7 +801,8 @@ int smtp_xfer(SMTP_STATE *state)
if (downgrading == 0) { if (downgrading == 0) {
smtp_text_out((void *) state, rec_type, smtp_text_out((void *) state, rec_type,
vstring_str(state->scratch), vstring_str(state->scratch),
VSTRING_LEN(state->scratch)); VSTRING_LEN(state->scratch),
(off_t) 0);
} else { } else {
mime_errs = mime_errs =
mime_state_update(state->mime_state, rec_type, mime_state_update(state->mime_state, rec_type,

View File

@@ -781,8 +781,7 @@ static int mail_cmd(SMTPD_STATE *state, int argc, SMTPD_TOKEN *argv)
smtpd_chat_reply(state, "%s", err); smtpd_chat_reply(state, "%s", err);
return (-1); return (-1);
} }
if ((SMTPD_STAND_ALONE(state) || var_smtpd_delay_reject == 0) if ((err = smtpd_check_size(state, state->msg_size)) != 0) {
&& (err = smtpd_check_size(state, state->msg_size)) != 0) {
smtpd_chat_reply(state, "%s", err); smtpd_chat_reply(state, "%s", err);
return (-1); return (-1);
} }

View File

@@ -2983,8 +2983,7 @@ char *smtpd_check_rcpt(SMTPD_STATE *state, char *recipient)
if (var_smtpd_delay_reject) if (var_smtpd_delay_reject)
if ((err = smtpd_check_client(state)) != 0 if ((err = smtpd_check_client(state)) != 0
|| (err = smtpd_check_helo(state, state->helo_name)) != 0 || (err = smtpd_check_helo(state, state->helo_name)) != 0
|| (err = smtpd_check_mail(state, state->sender)) != 0 || (err = smtpd_check_mail(state, state->sender)) != 0)
|| (err = smtpd_check_size(state, state->msg_size)) != 0)
SMTPD_CHECK_RCPT_RETURN(err); SMTPD_CHECK_RCPT_RETURN(err);
/* /*
@@ -3165,6 +3164,7 @@ char *smtpd_check_size(SMTPD_STATE *state, off_t size)
/* /*
* Return here in case of serious trouble. * Return here in case of serious trouble.
*/ */
SMTPD_CHECK_RESET();
if ((status = setjmp(smtpd_check_buf)) != 0) if ((status = setjmp(smtpd_check_buf)) != 0)
return (status == SMTPD_CHECK_REJECT ? STR(error_text) : 0); return (status == SMTPD_CHECK_REJECT ? STR(error_text) : 0);

View File

@@ -484,7 +484,7 @@ extern int initgroups(const char *, int);
#define HAS_FLOCK_LOCK #define HAS_FLOCK_LOCK
#define HAS_FCNTL_LOCK #define HAS_FCNTL_LOCK
#define INTERNAL_LOCK MYFLOCK_STYLE_FLOCK #define INTERNAL_LOCK MYFLOCK_STYLE_FLOCK
#define DEF_MAILBOX_LOCK "flock, dotlock" #define DEF_MAILBOX_LOCK "fcntl, dotlock" /* RedHat >= 4.x */
#define HAS_FSYNC #define HAS_FSYNC
#define HAS_DB #define HAS_DB
#define DEF_DB_TYPE "hash" #define DEF_DB_TYPE "hash"
@@ -512,7 +512,7 @@ extern int initgroups(const char *, int);
#define HAS_FLOCK_LOCK #define HAS_FLOCK_LOCK
#define HAS_FCNTL_LOCK #define HAS_FCNTL_LOCK
#define INTERNAL_LOCK MYFLOCK_STYLE_FLOCK #define INTERNAL_LOCK MYFLOCK_STYLE_FLOCK
#define DEF_MAILBOX_LOCK "flock, dotlock" /* unverified */ #define DEF_MAILBOX_LOCK "dotlock" /* verified RedHat 3.03 */
#define HAS_FSYNC #define HAS_FSYNC
#define HAS_DB #define HAS_DB
#define DEF_DB_TYPE "hash" #define DEF_DB_TYPE "hash"