Kevin Locke:
> On Wed, 2011-09-21 at 19:30 -0400, Wietse Venema wrote:
> > Kevin Locke:
> >> /^X-Spam-Status: Yes.*tests=(.*) autolearn=/ REJECT Message identified as
> >> spam by SpamAssassin using the following tests: $1
> >>
> >> This works great, except that the message is chopped off at the first
> >> line break in the X-Spam-Status header.
> >
> > Multi-line reject messages have never been supported in Postfix,
> > and I don't expect that to change (that would require subtle changes
> > to the SMTP server and to the bounce message formatter among other
> > things).
> >
> > What happens in the above example is the result of an omission to
> > filter out newline characters. In the context of web applications,
> > I believe that this would be called a line-splitting bug.
>
> Great. Thanks for the information.
>
> Is it a bug that I should submit somewhere, or is that what I have
> just done?
While fixing this, I found an unrelated multi-line bug with
replies from a before-queue content filter.
Wietse
==> /home/ftp/upload/me/20110922-cleanup-multiline-reject-patch <==
20110921
Bugfix (introduced: Postfix 1.1): smtpd(8) did not sanitize
newline characters in cleanup(8) REJECT messages. This
happened when a REJECT pattern matched multi-line header
text. Discovered by Kevin Locke. File: smtpd/smtpd.c.
*** /var/tmp/postfix-2.9-20110918/src/smtpd/smtpd.c Thu Aug 18 17:16:21 2011
--- src/smtpd/smtpd.c Thu Sep 22 10:40:53 2011
***************
*** 3057,3062 ****
--- 3057,3063 ----
if (state->err == 0) {
why = vstring_alloc(10);
state->err = mail_stream_finish(state->dest, why);
+ printable(STR(why), ' ');
} else
mail_stream_cleanup(state->dest);
state->dest = 0;
==> /home/ftp/upload/me/20110922-smtpd-proxy-multiline-reject-patch <==
20110922
Bugfix (introduced: Postfix 2.1): smtpd(8) sent multi-line
responses from a before-queue content filter as text with
bare <LF> instead of <CR><LF>. Found during code maintenance.
File: smtpd/smtpd_proxy.c.
*** /var/tmp/postfix-2.9-20110918/src/smtpd/smtpd_proxy.c Sat Feb 5
18:44:05 2011
--- src/smtpd/smtpd_proxy.c Thu Sep 22 10:37:44 2011
***************
*** 788,794 ****
*/
if (LEN(proxy->buffer) < var_line_limit) {
if (VSTRING_LEN(proxy->buffer))
! VSTRING_ADDCH(proxy->buffer, '\n');
vstring_strcat(proxy->buffer, STR(buffer));
}
--- 788,794 ----
*/
if (LEN(proxy->buffer) < var_line_limit) {
if (VSTRING_LEN(proxy->buffer))
! vstring_strcat(proxy->buffer, "\r\n");
vstring_strcat(proxy->buffer, STR(buffer));
}