]> git.ipfire.org Git - thirdparty/postfix.git/commitdiff
postfix-1.1.11-20021013
authorWietse Venema <wietse@porcupine.org>
Sun, 13 Oct 2002 05:00:00 +0000 (00:00 -0500)
committerViktor Dukhovni <viktor@dukhovni.org>
Tue, 5 Feb 2013 06:28:19 +0000 (06:28 +0000)
32 files changed:
postfix/HISTORY
postfix/RELEASE_NOTES
postfix/auxiliary/MacOSX/Postfix.StartupItem/Postfix
postfix/auxiliary/MacOSX/README-INSTALL.OSX
postfix/auxiliary/MacOSX/activate-postfix
postfix/auxiliary/MacOSX/activate-sendmail
postfix/auxiliary/MacOSX/deactivate-postfix [new file with mode: 0755]
postfix/auxiliary/MacOSX/defines
postfix/auxiliary/MacOSX/niscript [changed mode: 0644->0755]
postfix/auxiliary/MacOSX/repair-oldsetup [new file with mode: 0755]
postfix/conf/sample-filter.cf
postfix/html/cleanup.8.html
postfix/man/man8/cleanup.8
postfix/src/cleanup/cleanup.c
postfix/src/cleanup/cleanup_init.c
postfix/src/cleanup/cleanup_message.c
postfix/src/global/mail_params.h
postfix/src/global/mail_version.h
postfix/src/global/mime_8bit.ref
postfix/src/global/mime_cvt.ref
postfix/src/global/mime_cvt.ref2
postfix/src/global/mime_cvt.ref3
postfix/src/global/mime_dom.ref
postfix/src/global/mime_nest.ref
postfix/src/global/mime_state.c
postfix/src/global/mime_state.h
postfix/src/global/mime_test.ref
postfix/src/global/mime_trunc.ref
postfix/src/smtp/smtp_proto.c
postfix/src/smtpd/smtpd.c
postfix/src/smtpd/smtpd_check.c
postfix/src/util/sys_defs.h

index f445677857fce08c94ce118b011e33eb516e821e..9794bb62db85b73b8616618ebc5ddc53e56c0775 100644 (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
index d48b20094bf551ce72a3c8a048839699a5b87dc3..5e0fbbdd3d6d39b5455a0e6256ed62ef657aa7ce 100644 (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
 ==========================================================
 
index 01bd81cad7107bb15d9e7fd97a4ed27693321478..5c6511426448e07e49057d7992038721423ebb36 100755 (executable)
@@ -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
index 32f1d9ef4b634c47de39ebb53680c84ea167d67a..1a47721c43e0f07b58eeb01dd29c788bdcc6c967 100644 (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
index 50d5b990add47f2fc404fde6b68f95be089f80ac..9d7779e8da541d73293176938ae52b51a5c74979 100755 (executable)
@@ -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
index 15f68eb78168d5bb45981f6458d0f750e48ed0aa..72adf94fc2dba495cfa4ab30cc62a09a1d99f9d6 100755 (executable)
@@ -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
diff --git a/postfix/auxiliary/MacOSX/deactivate-postfix b/postfix/auxiliary/MacOSX/deactivate-postfix
new file mode 100755 (executable)
index 0000000..8b398b1
--- /dev/null
@@ -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
index 3aa667d7ff90e7c436158791322ec91be290cc94..298a547e553460ca9c4277bd0bde3b6cba27d820 100644 (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
old mode 100644 (file)
new mode 100755 (executable)
diff --git a/postfix/auxiliary/MacOSX/repair-oldsetup b/postfix/auxiliary/MacOSX/repair-oldsetup
new file mode 100755 (executable)
index 0000000..a8e1840
--- /dev/null
@@ -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
index 248c4e891fc2e0f34a6299c5fed88413b3e2d337..3ab0d02e4ec4348489e43a03efdfdb7394e52aa0 100644 (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
index 028b0e22afb9793f6017a648bfa262d0d1a0d920..e6452a99927dc46c20a5e91b49bac597f617a26f 100644 (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>
index 9d556d20b90f3338dc2444c94e541ba8ea8b4170..2eb98b2ea8fed33f860f2857988ed727e4e1a094 100644 (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)"
index bde24874998f745a3a39841554b57e9d662ca86a..5eba3cf49940e3d3b63a76bda592a95a71ff1bff 100644 (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)"
index d1699aebd2188f3230d942ae88520d923d36e5dd..ad419cb19e82d88d4feee907e51b1a0638588d96 100644 (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,
 };
 
index e1c9e51060feb3e6bc3b284f26859839f6a51465..a683b5e57c0859a622fb9cef6c2e33a2ee0d281a 100644 (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) {
index 934b103ca2ad21f65856b9aed33ea5507ee41494..558c44a44224ffd3fa9983321d3ed0449e5dd8f0 100644 (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.
   */
index c5405dd5fcb7414e690e212ddc704ba1fa724906..cf8746606a031d3d0d362deb30c96878bd669397 100644 (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
index e9d6eae0993726b6f3d381727398a94e480a7ba8..2a287a3894bf886728977ef5804269c99243cd19 100644 (file)
@@ -1,9 +1,9 @@
 mime_state: warning: improper use of 8-bit data in message header: Header: f??bar
-MAIN   Header: f\80\80bar
+MAIN 0 Header: f\80\80bar
 HEADER END
-BODY N 
+BODY N 0       
 mime_state: warning: improper use of 8-bit data in message body: b?dy
-BODY N b\80dy
+BODY N 1       b\80dy
 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
index a6e0227c2923ef80e1560d906818059a342d5075..c3b59adaf7c093d093bc250b76d8d187716c4f61 100644 (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
index fa0d00a43c7fb4993f389f386480c4c68dd3b18d..2f8d8628c4691e70a68ea44cbe7234f1c3e81771 100644 (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
index a5b4f64d8fe5094b107ea426a03091b47b405548..b36eb213f3bea509f10f1c8ce65697ea851d0a08 100644 (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
index 22ce81ad408c9e7e5d2f152342fe2e693005767f..da730e61b69ea38538e1455319e2422ac8ae9ea2 100644 (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
index d1e32cb3713397a66b0ea4a82f0c5a94caf7b491..11bce36db83ce9a0f8db6ccdd58e368871d786ab 100644 (file)
 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
index b5cf003fa7c35451287ca5477a053f963db5e6b8..5a3345fe3b2e63445b7334fcd125b65622fec4ed 100644 (file)
 /*                                  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)
 /*     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);
index 818bd66f152e0d1d7c07700844fdca07899de978..a3318c881ed473f463bca5ccfccd1f8e749f2328 100644 (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 *);
 
index ef36f78103f9a74f01e13c713a9ca59b32f1a94c..bdae67f1e266e2be792cc2d6f12fcee60fb3e0be 100644 (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
index c7f0c8eb38a75dbfab6c2f7aac8b174bf22cd8e5..7f38af40503b0bc3a74eca404e8336bd56498623 100644 (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 
index 1b3215110940adc623b5b8f111be951e129b9923..d13fe66cf6e6f8cb7d5bb454c69e0c3b2944ae97 100644 (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,
index 56e38bea84b561cc38b67007561d42b66e67c2d6..b88803c9a9e1b3f452325ed25bd7f54934cdb0e3 100644 (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);
     }
index 9fe7cfed27b0f0d82db7a607b775fce91c0a32ca..6bb1a23794a28cee01f3919638858e48de6b37f4 100644 (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);
 
index b4076daeacb19e551651fcf07f02f30a6d897a59..d1735d9f8faf269dde62d85a5b635a3b66b3dd80 100644 (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"