2
0
mirror of https://github.com/vdukhovni/postfix synced 2025-08-30 13:48:06 +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:
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:
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
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
==========================================================

View File

@ -3,15 +3,26 @@
# Gerben Wierda, Oct 2001. Adapted from an existing example. I waive every
# 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
if [ "${POSTFIX:=-NO-}" = "-YES-" -a "${MAILSERVER:=-NO-}" = "-YES-" ]
then
ConsoleMessage "Cannot run concurrent postfix and sendmail"
sleep 2
exit
fi
##
# Start mail server
##
if [ "$1" == "start" ]
then
if [ "${MAILSERVER:=-NO-}" = "-YES-" ]
if [ "${POSTFIX:=-NO-}" = "-YES-" ]
then
ConsoleMessage "Starting Postfix mail services"
/usr/sbin/postfix start
@ -22,7 +33,7 @@ then
/usr/sbin/postfix stop
elif [ "$1" == "restart" ]
then
if [ "${MAILSERVER:=-NO-}" = "-YES-" ]
if [ "${POSTFIX:=-NO-}" = "-YES-" ]
then
ConsoleMessage "Reloading Postfix configuration"
/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!
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
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.
# 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
# of postfix:
sudo ./niscript
# Prepare for reactivating sendmail if you want to
sudo ./backup-sendmail-binaries
# Install postfix:
# When the script asks you for setgid (the default will be no) tell it
# maildrop
(cd ../..; sudo make install)
# Prepare for reactivating postfix if you want to
# Prepare for reactivating postfix
sudo ./backup-postfix-binaries
# edit /etc/postfix/main.cf to suit your requirements
### add your own commands here ###
### add your own command here ###
# Install the startup item and move the existing sendmail startup item
# out of the way
# Activate postfix startup at boot time. Deactivates sendmail.
sudo ./activate-postfix
# Restart your computer
# 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
# 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
# Restart your computer

View File

@ -5,6 +5,7 @@
. ./defines
# Activate binaries
if [ ! -e ${POSTFIXBACKUPDIR}/sendmail ]
then
echo "Something is wrong: there is no existing postfix binary backup"
@ -30,32 +31,13 @@ else
fi
fi
if [ -e "${SSI}" ]
then
if [ ! -d "${SIDISABLEDDIR}" ]
then
mkdir -p "${SIDISABLEDDIR}"
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"
# De-activate sendmail in /etc/hostconfig
/usr/bin/perl -pi -e 's/MAILSERVER=-YES-/MAILSERVER=-NO-/g' /etc/hostconfig
# Activate postfix in /etc/hostconfig
if /usr/bin/grep '^POSTFIX=-NO-' /etc/hostconfig >/dev/null 2>&1; then
/usr/bin/perl -pi -e 's/POSTFIX=-NO-/POSTFIX=-YES-/g' /etc/hostconfig
else
echo "Note: Postfix needs MAILSERVER set to -YES- in /etc/hostconfig"
echo "Postfix will NOT start on reboot"
echo "POSTFIX=-YES-" >>/etc/hostconfig
fi
/usr/sbin/postfix start

View File

@ -5,9 +5,12 @@
. ./defines
. ./deactivate-postfix
# Activate binaries
if [ ! -e ${SENDMAILBACKUPDIR}/sendmail ]
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;
else
echo "Restoring sendmail versions of sendmail programs from backup..."
@ -16,45 +19,6 @@ else
(cd ${SENDMAILBACKUPDIR}; tar cf - mailq) | (cd /usr/bin; tar xf -)
fi
if [ -e "${SSI}" ]
then
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
# Activate sendmail in /etc/hostconfig
/usr/bin/perl -pi -e 's/MAILSERVER=-NO-/MAILSERVER=-YES-/g' /etc/hostconfig
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
# I also do not give any warranty.
SIDIR="/System/Library/StartupItems"
SIDISABLEDDIR="/System/Library/DisabledStartupItems"
SIDIR="/Library/StartupItems"
PSI="${SIDIR}/Postfix"
SSI="${SIDIR}/Sendmail"
PSIDISABLED="${SIDISABLEDDIR}/Postfix"
SSIDISABLED="${SIDISABLEDDIR}/Sendmail"
PSIDISABLED="${PSI}.disabled"
POSTFIXBACKUPDIR=/usr/sbin/.postfixbackup
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.
#
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
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>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>)
Lookup tables with content filters for message
header lines: respectively, these are applied to
the primary message headers (not including MIME
headers), to the MIME headers anywhere in the mes-
sage, and to the initial headers of attached mes-
sages. These filters see logical headers one at a
Lookup tables with content filters for message
header lines: respectively, these are applied to
the primary message headers (not including MIME
headers), to the MIME headers anywhere in the mes-
sage, and to the initial headers of attached mes-
sages. These filters see logical headers one at a
time, including headers that span multiple lines.
<b>MIME</b> <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-
tial message headers is considered to be part of
tial message headers is considered to be part of
the message body.
<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
multipart boundary strings. The MIME processor is
multipart boundary strings. The MIME processor is
unable to distinguish between boundary strings that
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>mime</b><i>_</i><b>nesting</b><i>_</i><b>limit</b>
The maximal nesting level of multipart mail that
the MIME processor can handle. Refuse mail that is
The maximal nesting level of multipart mail that
the MIME processor can handle. Refuse mail that is
nested deeper.
<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>strict</b><i>_</i><b>7bit</b><i>_</i><b>headers</b>
Reject mail with 8-bit text in message headers.
This blocks mail from poorly written applications.
Reject mail with 8-bit text in message headers.
This blocks mail from poorly written applications.
<b>strict</b><i>_</i><b>8bitmime</b><i>_</i><b>body</b>
Reject mail with 8-bit text in content that claims
to be 7-bit, or in content that has no explicit
content encoding information. This blocks mail
mail poorly written mail software. Unfortunately,
this also breaks majordomo approval requests when
the included request contains valid 8-bit MIME
mail, and it breaks bounces from mailers that do
not properly encapsulate 8-bit content (for exam-
ple, bounces from qmail or from old versions of
Reject mail with 8-bit text in content that claims
to be 7-bit, or in content that has no explicit
content encoding information. This blocks mail
mail poorly written mail software. Unfortunately,
this also breaks majordomo approval requests when
the included request contains valid 8-bit MIME
mail, and it breaks bounces from mailers that do
not properly encapsulate 8-bit content (for exam-
ple, bounces from qmail or from old versions of
Postfix).
<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>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.
<b>hopcount</b><i>_</i><b>limit</b>
@ -149,8 +153,8 @@ CLEANUP(8) CLEANUP(8)
<b>Address</b> <b>transformations</b>
<b>empty</b><i>_</i><b>address</b><i>_</i><b>recipient</b>
The destination for undeliverable mail from &lt;&gt;.
This substitution is done before all other address
The destination for undeliverable mail from &lt;&gt;.
This substitution is done before all other address
rewriting.
<b>canonical</b><i>_</i><b>maps</b>
@ -166,16 +170,16 @@ CLEANUP(8) CLEANUP(8)
header sender addresses.
<b>masquerade</b><i>_</i><b>classes</b>
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>
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>
<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>
List of domains that hide their subdomain struc-
List of domains that hide their subdomain struc-
ture.
<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.
<b>virtual</b><i>_</i><b>maps</b>
@ -184,7 +188,7 @@ CLEANUP(8) CLEANUP(8)
<b>Resource</b> <b>controls</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.
<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>
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.
<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.
<b>SEE</b> <b>ALSO</b>
@ -212,7 +216,7 @@ CLEANUP(8) CLEANUP(8)
/etc/postfix/virtual*, virtual mapping table
<b>LICENSE</b>
The Secure Mailer license must be distributed with this
The Secure Mailer license must be distributed with this
software.
<b>AUTHOR(S)</b>

View File

@ -81,6 +81,9 @@ a configuration change.
Lookup tables with content filters for message body lines.
These filters see physical lines one at a time, in chunks of
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 "\fBmime_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.
/* These filters see physical lines one at a time, in chunks of
/* 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 "\fBmime_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_masq_classes; /* what to masquerade */
int var_qattr_count_limit; /* named attribute limit */
int var_body_check_len; /* when to stop body scan */
CONFIG_INT_TABLE cleanup_int_table[] = {
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_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_BODY_CHECK_LEN, DEF_BODY_CHECK_LEN, &var_body_check_len, 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 */
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;
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 */
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;
@ -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
* 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;
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 ""
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.
*/

View File

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

View File

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

View File

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

View File

@ -11,12 +11,14 @@
/* err_print, context)
/* int flags;
/* 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 (*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 (*err_print(void *ptr, int err_flag, const char *text)
/* void (*err_print)(void *ptr, int err_flag, const char *text)
/* void *context;
/*
/* int mime_state_update(state, rec_type, buf, len)
@ -152,6 +154,9 @@
/* the last message header in the first header block is processed.
/* .IP len
/* 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
/* The input record type as defined in rec_type(3h). State is
/* 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 */
VSTRING *token_buffer; /* header parser scratch buffer */
int err_flags; /* processing errors */
off_t head_offset; /* offset in header block */
off_t body_offset; /* offset in body block */
/*
* Static members.
@ -316,6 +323,18 @@ struct MIME_STATE {
(ptr)->curr_stype = (stype); \
(ptr)->curr_encoding = (encoding); \
(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)
/*
@ -364,6 +383,22 @@ static MIME_ENCODING mime_encoding_map[] = { /* RFC 2045 */
} \
} 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 */
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) {
VSTRING_ADDCH(state->output_buffer, '=');
VSTRING_TERMINATE(state->output_buffer);
state->body_out(state->app_context, REC_TYPE_NORM,
STR(state->output_buffer),
LEN(state->output_buffer));
BODY_OUT(state, REC_TYPE_NORM,
STR(state->output_buffer),
LEN(state->output_buffer));
VSTRING_RESET(state->output_buffer);
}
/* 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);
}
VSTRING_TERMINATE(state->output_buffer);
state->body_out(state->app_context, REC_TYPE_NORM,
STR(state->output_buffer),
LEN(state->output_buffer));
BODY_OUT(state, REC_TYPE_NORM,
STR(state->output_buffer),
LEN(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
|| (state->static_flags & MIME_OPT_DOWNGRADE) == 0
|| state->curr_domain == MIME_ENC_7BIT)
state->head_out(state->app_context, state->curr_state,
header_info, state->output_buffer);
HEAD_OUT(state, header_info);
state->prev_rec_type = 0;
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");
vstring_sprintf(state->output_buffer,
"Content-Transfer-Encoding: %s", cp);
state->head_out(state->app_context, state->curr_state,
0, state->output_buffer);
HEAD_OUT(state, (HEADER_OPTS *) 0);
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
* messages. Otherwise, treat such headers as part of the "body". Set
* 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 (*text == 0) {
state->body_offset = 0; /* XXX */
if (state->curr_ctype == MIME_CTYPE_MESSAGE) {
if (state->curr_stype == MIME_STYPE_RFC822
|| (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_ENC_7BIT, MIME_ENC_7BIT);
else
state->curr_state = MIME_STATE_BODY;
SET_CURR_STATE(state, MIME_STATE_BODY);
} else if (state->curr_ctype == MIME_CTYPE_MULTIPART) {
SET_MIME_STATE(state, MIME_STATE_BODY,
MIME_CTYPE_OTHER, MIME_STYPE_OTHER,
MIME_ENC_7BIT, MIME_ENC_7BIT);
} 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.
*/
else {
state->body_out(state->app_context, REC_TYPE_NORM, "", 0);
state->curr_state = MIME_STATE_BODY;
SET_CURR_STATE(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.
*/
else {
state->curr_state = MIME_STATE_BODY;
SET_CURR_STATE(state, MIME_STATE_BODY);
}
/* FALLTHROUGH */
@ -957,7 +994,7 @@ int mime_state_update(MIME_STATE *state, int rec_type,
&& state->curr_domain != MIME_ENC_7BIT)
mime_state_downgrade(state, rec_type, text, len);
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
static void head_out(void *context, int class, HEADER_OPTS *unused_info,
VSTRING *buf)
VSTRING *buf, off_t offset)
{
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_MULTIPART ? "MULT" :
class == MIME_HDR_NESTED ? "NEST" :
"ERROR", STR(buf));
"ERROR", (long) offset, STR(buf));
}
static void head_end(void *context)
@ -1031,11 +1068,12 @@ static void head_end(void *context)
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_fprintf(stream, "BODY %c\t", rec_type);
vstream_fprintf(stream, "BODY %c %ld\t", rec_type, (long) offset);
vstream_fwrite(stream, buf, len);
if (rec_type == REC_TYPE_NORM)
VSTREAM_PUTC('\n', stream);

View File

@ -25,8 +25,8 @@
* External interface. All MIME_STATE structure members are private.
*/
typedef struct MIME_STATE MIME_STATE;
typedef void (*MIME_STATE_HEAD_OUT) (void *, int, HEADER_OPTS *, VSTRING *);
typedef void (*MIME_STATE_BODY_OUT) (void *, int, const char *, int);
typedef void (*MIME_STATE_HEAD_OUT) (void *, int, HEADER_OPTS *, VSTRING *, off_t);
typedef void (*MIME_STATE_BODY_OUT) (void *, int, const char *, int, off_t);
typedef void (*MIME_STATE_ANY_END) (void *);
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: 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
HEADER END
BODY N
BODY N abcdef prolog
BODY N
BODY N --abcd ef
BODY N 0
BODY N 1 abcdef prolog
BODY N 15
BODY N 16 --abcd ef
mime_state: header_token: message / rfc822
MULT content-type: message/rfc822; mumble
BODY N
NEST subject: nested subject
MULT 0 content-type: message/rfc822; mumble
BODY N 0
NEST 0 subject: nested subject
mime_state: header_token: multipart / mumble
mime_state: header_token: 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
NEST content-transfer-encoding: base64
NEST 91 content-transfer-encoding: base64
mime_state: warning: invalid message/* or multipart/* encoding domain: base64
BODY N
BODY N pqrs prolog
BODY N
BODY N --pqrs
MULT header: pqrs part 01
BODY N
BODY N body pqrs part 01
BODY N
BODY N --pqrs
MULT header: pqrs part 02
BODY N
BODY N body pqrs part 02
BODY N
BODY N --bogus-boundary
BODY N header: wietse
BODY N
BODY N body asdasads
BODY N
BODY N 0
BODY N 1 pqrs prolog
BODY N 13
BODY N 14 --pqrs
MULT 0 header: pqrs part 01
BODY N 0
BODY N 1 body pqrs part 01
BODY N 19
BODY N 20 --pqrs
MULT 0 header: pqrs part 02
BODY N 0
BODY N 1 body pqrs part 02
BODY N 19
BODY N 20 --bogus-boundary
BODY N 37 header: wietse
BODY N 52
BODY N 53 body asdasads
BODY N 67
mime_state: POP boundary pqrs
BODY N --abcd ef
MULT header: abcdef part 02
BODY N
BODY N body abcdef part 02
BODY N
BODY N 68 --abcd ef
MULT 0 header: abcdef part 02
BODY N 0
BODY N 1 body abcdef part 02
BODY N 21
mime_state: POP boundary abcd ef
BODY N --abcd ef--
BODY N
BODY N epilog
BODY N 0 --abcd ef--
BODY N 12
BODY N 13 epilog
BODY END
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
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

View File

@ -288,7 +288,8 @@ int smtp_helo(SMTP_STATE *state)
/* smtp_text_out - output one header/body record */
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_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 */
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 *line;
@ -342,7 +344,7 @@ static void smtp_header_out(void *context, int unused_header_class,
for (line = start; line; line = next_line) {
next_line = split_at(line, '\n');
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) {
smtp_text_out((void *) state, rec_type,
vstring_str(state->scratch),
VSTRING_LEN(state->scratch));
VSTRING_LEN(state->scratch),
(off_t) 0);
} else {
mime_errs =
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);
return (-1);
}
if ((SMTPD_STAND_ALONE(state) || var_smtpd_delay_reject == 0)
&& (err = smtpd_check_size(state, state->msg_size)) != 0) {
if ((err = smtpd_check_size(state, state->msg_size)) != 0) {
smtpd_chat_reply(state, "%s", err);
return (-1);
}

View File

@ -2983,8 +2983,7 @@ char *smtpd_check_rcpt(SMTPD_STATE *state, char *recipient)
if (var_smtpd_delay_reject)
if ((err = smtpd_check_client(state)) != 0
|| (err = smtpd_check_helo(state, state->helo_name)) != 0
|| (err = smtpd_check_mail(state, state->sender)) != 0
|| (err = smtpd_check_size(state, state->msg_size)) != 0)
|| (err = smtpd_check_mail(state, state->sender)) != 0)
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.
*/
SMTPD_CHECK_RESET();
if ((status = setjmp(smtpd_check_buf)) != 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_FCNTL_LOCK
#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_DB
#define DEF_DB_TYPE "hash"
@ -512,7 +512,7 @@ extern int initgroups(const char *, int);
#define HAS_FLOCK_LOCK
#define HAS_FCNTL_LOCK
#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_DB
#define DEF_DB_TYPE "hash"