with addresses of exactly 100 bytes long, resulting in
SIGSEGV on systems with an "exact fit" malloc routine.
Experienced by Ralf Hildebrandt; diagnosed by Victor
- Duchovny. Files: *qmgr/qmgr_message.c. This is not a
+ Duchovni. Files: *qmgr/qmgr_message.c. This is not a
security problem.
Bugfix: make all recipient comparisons transitive, because
Solaris qsort() causes SIGSEGV errors otherwise. Victor
- Duchovny, Morgan Stanley. File: *qmgr/qmgr_message.c.
+ Duchovni, Morgan Stanley. File: *qmgr/qmgr_message.c.
20020302
Bugfix: DBM maps should use different files for locking
and for change detection. Problem reported by Victor
- Duchovny, Morgan Stanley. Files: util/dict.h util/dict.c
+ Duchovni, Morgan Stanley. Files: util/dict.h util/dict.c
util/dict_db.c util/dict_dbm.c global/mkmap.c local/alias.c.
20020313
Bugfix: mailq could show addresses with unusual characters
- twice. Problem reported by Victor Duchovny, Morgan Stanley.
+ twice. Problem reported by Victor Duchovni, Morgan Stanley.
File: showq/showq.c.
Bugfix: null recipients weren't properly recorded in
Bugfix: close user@domain@postfix-style.virtual.domain
source routing relaying loophole involving postfix-style
virtual domains with @virtual.domain catch-all patterns.
- Problem reported by Victor Duchovny. File: smtpd/smtpd_check.c.
+ Problem reported by Victor Duchovni. File: smtpd/smtpd_check.c.
Bugfix: mail_addr_map() used the "wrong" @ character in
- addresses with multiple @. Victor Duchovny. File:
+ addresses with multiple @. Victor Duchovni. File:
global/mail_addr_map.c.
Bugfix: for address localpart quoting, now quote @ as a
Safety: don't allow an OK access rule lookup result for
user@domain@postfix-style.virtual.domain. Suggested by
- Victor Duchovny, Morgan Stanley. File: smtpd/smtpd_check.c.
+ Victor Duchovni, Morgan Stanley. File: smtpd/smtpd_check.c.
Bugfix: quote unquoted address localparts that need quoting.
Files: global/tok822_parse.c, global/quote_82[12]_local.c.
Documentation: simplified the advanced content filtering
example, and included a more advanced example for those
who want to squeeze out more performance without running
- multiple Postfix instances. Text by Victor Duchovny, Morgan
+ multiple Postfix instances. Text by Victor Duchovni, Morgan
Stanley. File: README_FILES/FILTER_README.
20020510
Safety: user@domain@domain is no longer accepted by the
permit_mx_backup uce restriction (unless Postfix is configured
- with "resolve_dequoted_address = no"). Victor Duchovny,
+ with "resolve_dequoted_address = no"). Victor Duchovni,
Morgan Stanley. File: smtpd/smtpd_check.c.
20020515
Feature: new MIME parser, written from scratch, that
recognizes the structure of MIME encapsulated mail. Influenced
- by comments from Victor Duchovny. This code can detect but
+ by comments from Victor Duchovni. This code can detect but
will not decode obscure MIME formats or obscure character
string encoding that Liviu Daia expresses concern about.
without proper logging. Files: global/mime_state.c,
cleanup/cleanup_message.c.
+20020531
+
+ Bugfix: the SMTP client code that prepends '.' to lines
+ starting with '.' had to be moved from its old place to
+ after the MIME output conversion. Problem found by Mark
+ Martinec. File: smtp/smtp_proto.c.
+
Open problems:
Medium: old maildrop files are no longer readable by the
/* .fi
/* This code was implemented from scratch after reading the RFC
/* documents. This was a relatively straightforward effort with
-/* few if any surprises. Victor Duchovny of Morgan Stanley shared
+/* few if any surprises. Victor Duchovni of Morgan Stanley shared
/* his experiences with ambiguities in real-life MIME implementations.
/* Liviu Daia of the Romanian Academy shared his insights in some
/* of the darker corners.
msg_warn("%s: %.100s", mime_state_error(err_flag), text);
}
-int var_header_limit = 200;
+int var_header_limit = 2000;
int var_mime_maxdepth = 20;
-int var_mime_bound_len = 200;
+int var_mime_bound_len = 2000;
int main(int unused_argc, char **argv)
{
data_left = len;
data_start = text;
do {
+ if (state->space_left == var_smtp_line_limit && *data_start == '.')
+ smtp_fputc('.', session->stream);
if (var_smtp_line_limit > 0 && data_left >= state->space_left) {
smtp_fputs(data_start, state->space_left, session->stream);
data_start += state->space_left;
while ((rec_type = rec_get(state->src, state->scratch, 0)) > 0) {
if (rec_type != REC_TYPE_NORM && rec_type != REC_TYPE_CONT)
break;
- if (prev_type != REC_TYPE_CONT)
- if (vstring_str(state->scratch)[0] == '.')
- smtp_fputc('.', session->stream);
if (downgrading == 0) {
smtp_text_out((void *) state, rec_type,
vstring_str(state->scratch),