diff --git a/postfix/HISTORY b/postfix/HISTORY index f44567785..9794bb62d 100644 --- a/postfix/HISTORY +++ b/postfix/HISTORY @@ -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 diff --git a/postfix/RELEASE_NOTES b/postfix/RELEASE_NOTES index d48b20094..5e0fbbdd3 100644 --- a/postfix/RELEASE_NOTES +++ b/postfix/RELEASE_NOTES @@ -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 ========================================================== diff --git a/postfix/auxiliary/MacOSX/Postfix.StartupItem/Postfix b/postfix/auxiliary/MacOSX/Postfix.StartupItem/Postfix index 01bd81cad..5c6511426 100755 --- a/postfix/auxiliary/MacOSX/Postfix.StartupItem/Postfix +++ b/postfix/auxiliary/MacOSX/Postfix.StartupItem/Postfix @@ -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 diff --git a/postfix/auxiliary/MacOSX/README-INSTALL.OSX b/postfix/auxiliary/MacOSX/README-INSTALL.OSX index 32f1d9ef4..1a47721c4 100644 --- a/postfix/auxiliary/MacOSX/README-INSTALL.OSX +++ b/postfix/auxiliary/MacOSX/README-INSTALL.OSX @@ -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 diff --git a/postfix/auxiliary/MacOSX/activate-postfix b/postfix/auxiliary/MacOSX/activate-postfix index 50d5b990a..9d7779e8d 100755 --- a/postfix/auxiliary/MacOSX/activate-postfix +++ b/postfix/auxiliary/MacOSX/activate-postfix @@ -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 diff --git a/postfix/auxiliary/MacOSX/activate-sendmail b/postfix/auxiliary/MacOSX/activate-sendmail index 15f68eb78..72adf94fc 100755 --- a/postfix/auxiliary/MacOSX/activate-sendmail +++ b/postfix/auxiliary/MacOSX/activate-sendmail @@ -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 index 000000000..8b398b176 --- /dev/null +++ b/postfix/auxiliary/MacOSX/deactivate-postfix @@ -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 diff --git a/postfix/auxiliary/MacOSX/defines b/postfix/auxiliary/MacOSX/defines index 3aa667d7f..298a547e5 100644 --- a/postfix/auxiliary/MacOSX/defines +++ b/postfix/auxiliary/MacOSX/defines @@ -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 diff --git a/postfix/auxiliary/MacOSX/niscript b/postfix/auxiliary/MacOSX/niscript old mode 100644 new mode 100755 diff --git a/postfix/auxiliary/MacOSX/repair-oldsetup b/postfix/auxiliary/MacOSX/repair-oldsetup new file mode 100755 index 000000000..a8e1840c8 --- /dev/null +++ b/postfix/auxiliary/MacOSX/repair-oldsetup @@ -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 diff --git a/postfix/conf/sample-filter.cf b/postfix/conf/sample-filter.cf index 248c4e891..3ab0d02e4 100644 --- a/postfix/conf/sample-filter.cf +++ b/postfix/conf/sample-filter.cf @@ -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 diff --git a/postfix/html/cleanup.8.html b/postfix/html/cleanup.8.html index 028b0e22a..e6452a999 100644 --- a/postfix/html/cleanup.8.html +++ b/postfix/html/cleanup.8.html @@ -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. + body_checks_size_limit + The amount of content per message body segment that + is subjected to $body_checks filtering. + header_checks mime_header_checks (default: $header_checks) nested_header_checks (default: $header_checks) - 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. MIME Processing disable_mime_input_processing - While receiving, give no special treatment to Con- + While receiving, give no special treatment to Con- tent-Type: 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. mime_boundary_length_limit 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 $mime_bound- ary_length_limit characters. mime_nesting_limit - 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. strict_8bitmime - Turn on both strict_7bit_headers and strict_8bit- + Turn on both strict_7bit_headers and strict_8bit- mime_body. strict_7bit_headers - 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. strict_8bitmime_body - 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). strict_mime_domain_encoding @@ -136,7 +140,7 @@ CLEANUP(8) CLEANUP(8) Miscellaneous always_bcc - Address to send a copy of each message that enters + Address to send a copy of each message that enters the system. hopcount_limit @@ -149,8 +153,8 @@ CLEANUP(8) CLEANUP(8) Address transformations empty_address_recipient - The destination for undeliverable mail from <>. - This substitution is done before all other address + The destination for undeliverable mail from <>. + This substitution is done before all other address rewriting. canonical_maps @@ -166,16 +170,16 @@ CLEANUP(8) CLEANUP(8) header sender addresses. masquerade_classes - List of address classes subject to masquerading: - zero or more of envelope_sender, envelope_recipi- + List of address classes subject to masquerading: + zero or more of envelope_sender, envelope_recipi- ent, header_sender, header_recipient. masquerade_domains - List of domains that hide their subdomain struc- + List of domains that hide their subdomain struc- ture. masquerade_exceptions - List of user names that are not subject to address + List of user names that are not subject to address masquerading. virtual_maps @@ -184,7 +188,7 @@ CLEANUP(8) CLEANUP(8) Resource controls duplicate_filter_limit - Limit the number of envelope recipients that are + Limit the number of envelope recipients that are remembered. header_size_limit @@ -193,11 +197,11 @@ CLEANUP(8) CLEANUP(8) in_flow_delay 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. extract_recipient_limit - Limit the amount of recipients extracted from mes- + Limit the amount of recipients extracted from mes- sage headers. SEE ALSO @@ -212,7 +216,7 @@ CLEANUP(8) CLEANUP(8) /etc/postfix/virtual*, virtual mapping table LICENSE - The Secure Mailer license must be distributed with this + The Secure Mailer license must be distributed with this software. AUTHOR(S) diff --git a/postfix/man/man8/cleanup.8 b/postfix/man/man8/cleanup.8 index 9d556d20b..2eb98b2ea 100644 --- a/postfix/man/man8/cleanup.8 +++ b/postfix/man/man8/cleanup.8 @@ -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)" diff --git a/postfix/src/cleanup/cleanup.c b/postfix/src/cleanup/cleanup.c index bde248749..5eba3cf49 100644 --- a/postfix/src/cleanup/cleanup.c +++ b/postfix/src/cleanup/cleanup.c @@ -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)" diff --git a/postfix/src/cleanup/cleanup_init.c b/postfix/src/cleanup/cleanup_init.c index d1699aebd..ad419cb19 100644 --- a/postfix/src/cleanup/cleanup_init.c +++ b/postfix/src/cleanup/cleanup_init.c @@ -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, }; diff --git a/postfix/src/cleanup/cleanup_message.c b/postfix/src/cleanup/cleanup_message.c index e1c9e5106..a683b5e57 100644 --- a/postfix/src/cleanup/cleanup_message.c +++ b/postfix/src/cleanup/cleanup_message.c @@ -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) { diff --git a/postfix/src/global/mail_params.h b/postfix/src/global/mail_params.h index 934b103ca..558c44a44 100644 --- a/postfix/src/global/mail_params.h +++ b/postfix/src/global/mail_params.h @@ -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. */ diff --git a/postfix/src/global/mail_version.h b/postfix/src/global/mail_version.h index c5405dd5f..cf8746606 100644 --- a/postfix/src/global/mail_version.h +++ b/postfix/src/global/mail_version.h @@ -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 diff --git a/postfix/src/global/mime_8bit.ref b/postfix/src/global/mime_8bit.ref index e9d6eae09..2a287a389 100644 --- a/postfix/src/global/mime_8bit.ref +++ b/postfix/src/global/mime_8bit.ref @@ -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 diff --git a/postfix/src/global/mime_cvt.ref b/postfix/src/global/mime_cvt.ref index a6e0227c2..c3b59adaf 100644 --- a/postfix/src/global/mime_cvt.ref +++ b/postfix/src/global/mime_cvt.ref @@ -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 diff --git a/postfix/src/global/mime_cvt.ref2 b/postfix/src/global/mime_cvt.ref2 index fa0d00a43..2f8d8628c 100644 --- a/postfix/src/global/mime_cvt.ref2 +++ b/postfix/src/global/mime_cvt.ref2 @@ -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 diff --git a/postfix/src/global/mime_cvt.ref3 b/postfix/src/global/mime_cvt.ref3 index a5b4f64d8..b36eb213f 100644 --- a/postfix/src/global/mime_cvt.ref3 +++ b/postfix/src/global/mime_cvt.ref3 @@ -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 diff --git a/postfix/src/global/mime_dom.ref b/postfix/src/global/mime_dom.ref index 22ce81ad4..da730e61b 100644 --- a/postfix/src/global/mime_dom.ref +++ b/postfix/src/global/mime_dom.ref @@ -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 diff --git a/postfix/src/global/mime_nest.ref b/postfix/src/global/mime_nest.ref index d1e32cb37..11bce36db 100644 --- a/postfix/src/global/mime_nest.ref +++ b/postfix/src/global/mime_nest.ref @@ -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 diff --git a/postfix/src/global/mime_state.c b/postfix/src/global/mime_state.c index b5cf003fa..5a3345fe3 100644 --- a/postfix/src/global/mime_state.c +++ b/postfix/src/global/mime_state.c @@ -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); diff --git a/postfix/src/global/mime_state.h b/postfix/src/global/mime_state.h index 818bd66f1..a3318c881 100644 --- a/postfix/src/global/mime_state.h +++ b/postfix/src/global/mime_state.h @@ -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 *); diff --git a/postfix/src/global/mime_test.ref b/postfix/src/global/mime_test.ref index ef36f7810..bdae67f1e 100644 --- a/postfix/src/global/mime_test.ref +++ b/postfix/src/global/mime_test.ref @@ -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 diff --git a/postfix/src/global/mime_trunc.ref b/postfix/src/global/mime_trunc.ref index c7f0c8eb3..7f38af405 100644 --- a/postfix/src/global/mime_trunc.ref +++ b/postfix/src/global/mime_trunc.ref @@ -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 diff --git a/postfix/src/smtp/smtp_proto.c b/postfix/src/smtp/smtp_proto.c index 1b3215110..d13fe66cf 100644 --- a/postfix/src/smtp/smtp_proto.c +++ b/postfix/src/smtp/smtp_proto.c @@ -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, diff --git a/postfix/src/smtpd/smtpd.c b/postfix/src/smtpd/smtpd.c index 56e38bea8..b88803c9a 100644 --- a/postfix/src/smtpd/smtpd.c +++ b/postfix/src/smtpd/smtpd.c @@ -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); } diff --git a/postfix/src/smtpd/smtpd_check.c b/postfix/src/smtpd/smtpd_check.c index 9fe7cfed2..6bb1a2379 100644 --- a/postfix/src/smtpd/smtpd_check.c +++ b/postfix/src/smtpd/smtpd_check.c @@ -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); diff --git a/postfix/src/util/sys_defs.h b/postfix/src/util/sys_defs.h index b4076daea..d1735d9f8 100644 --- a/postfix/src/util/sys_defs.h +++ b/postfix/src/util/sys_defs.h @@ -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"