[rt-users] Bad SMTP Headers? Seems to be a Template.pm bug

Rafael Corvalan Rafael.Corvalan at linkvest.com
Mon Mar 18 06:02:23 EST 2002


Hello,

I have had from a long time some errors like:
Bad RFC822 field name '  Script And Config File'
in the RT log file. As I've seen in the mailing list archives, I'm not
alone.

After some debugging, it appears that the file Template.pm seems not to
be RFC822 compliant (correct me if I'm wrong) regarding the folding of
the headers.
In fact, the RFC822 (and also do so the RFC2822 that obsolets the 822)
says, in chapter 3.1.1:

=====================================
     3.1.1.  LONG HEADER FIELDS

        Each header field can be viewed as a single, logical  line  of
        ASCII  characters,  comprising  a field-name and a field-body.
        For convenience, the field-body  portion  of  this  conceptual
        entity  can be split into a multiple-line representation; this
        is called "folding".  The general rule is that wherever  there
        may  be  linear-white-space  (NOT  simply  LWSP-chars), a CRLF
        immediately followed by AT LEAST one LWSP-char may instead  be
        inserted.  Thus, the single line

            To:  "Joe & J. Harvey" <ddd @Org>, JJV @ BBN

        can be represented as:

            To:  "Joe & J. Harvey" <ddd @ Org>,
                    JJV at BBN
=====================================

Note that the RFC 2822 is a little more clear.


I made a very little change in Template.pm that corrected the problem
(tested since 2 weeks). The diff is based on Template.pm v1.2 (as per
what the file header says: 
# $Header: /raid/cvsroot/rt/lib/RT/Template.pm,v 1.2 2001/11/06 23:04:14
jesse Exp $).

Here is the diff:

[root at zorro RT]# diff -C 4 Template.pm.orig Template.pm
*** Template.pm.orig    Wed Mar  6 11:12:35 2002
--- Template.pm Mon Mar 18 11:31:10 2002
***************
*** 288,295 ****
--- 288,296 ----

    $self->{'MIMEObj'}->attach(Data => $body);

    if ($headers) {
+     $headers =~ s/\n[ \t]//mg;
      foreach $header (split(/\n/,$headers)) {
        (my $key, my $value) = (split(/: /,$header,2));
        chomp $key;
        chomp $value;

============================

So, I just remove any carriage return followed by a tab or space. This
is, from my point of view, RFC2822 compliant, which says about
unfolding:

   The process of moving from this folded multiple-line representation
   of a header field to its single line representation is called
   "unfolding". Unfolding is accomplished by simply removing any CRLF
   that is immediately followed by WSP.


Hope it helps, and sorry if I'm wrong, but I'm not an SMTP specialist...

Rafael




More information about the rt-users mailing list