Por que o sendmail está adicionando um retorno de carro extra nos cabeçalhos?

5

Tenho o SendMail 8.14.4 em execução em um servidor do CentOS 5.

Um usuário no Japão está enviando uma mensagem e quando ela é processada pelo servidor, o SendMail está adicionando um retorno de carro extra por algum motivo.

O email contém um cabeçalho X com valores que (presumivelmente) contêm caracteres internacionais. Eu digo "presumivelmente" porque quando eu examino a fonte MIME com o notepad ++ eu vejo esquisitices como STX e CAN .

Consegui limitar o escopo de testes a isso:

SeeuenviarissoatravésdoSendmail,eledeixaráoSendMailassim:

(ips, Q-ID e hostname alterados para proteger os inocentes)

Agora, obviamente, um possível sinal vermelho: o valor do cabeçalho começa com uma citação, mas não tem um valor de fechamento. Isso é exigido pelos padrões RFC? Ou essa parte é um arenque vermelho?

O resultado final é que os valores do cabeçalho vazam para o corpo da mensagem:

Alguma idéia de por que o sendmail está adicionando o retorno de carro extra?

    
por Mike B 17.07.2015 / 19:50

1 resposta

6

Isso é muito simples, na verdade: RFC 2822 seção 2.2.3 permite cabeçalhos longos, onde um header é um nome de campo seguido por um : para dobrar e continuar na próxima linha, desde que (simplificado) a próxima linha comece com um espaço .

The general rule is that wherever this standard allows for folding white space (not simply WSP characters), a CRLF may be inserted before any WSP. For example, the header field:
Subject: This is a test
can be represented as:

Subject: This  
 is a test

A linha 3 da entrada original começa não com um espaço, mas com o caracter c e não contém um dois-pontos : , o que não a torna nem a continuação da anterior cabeçalho nem o próximo campo de cabeçalho (§2.2).

Isso marca o fim dos cabeçalhos ...

E o começo do corpo.

O Sendmail "corrige" aquela mensagem malformada e adiciona a linha em branco necessária entre o que ela percebe como o fim dos cabeçalhos e o início do corpo.

Uma sessão de correio telnet simples pode reproduzir esse comportamento:

[user@example ~]$ telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.

<<< 220 example.com ESMTP Sendmail 8.14.4/8.14.4; Fri, 17 Jul 2015 20:29:26 +0200

helo localhost

<<< 250 example.com Hello localhost [127.0.0.1], pleased to meet you

mail from:me@localhost

<<< 250 2.1.0 me@localhost... Sender ok

RCPT TO:[email protected]

<<< 250 2.1.5 [email protected]... Recipient ok

data

<<< 354 Enter mail, end with "." on a line by itself

Subject: test
X-header: do not try
this at home

start the body
.
<<< 250 2.0.0 t6HITQXA020072 Message accepted for delivery
quit

O que resulta em uma mensagem semelhante ao seu exemplo:

[user@example ~/Maildir/new]$ cat 1437157845.20091_2.example.com

Return-Path: <[email protected]>
X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on example.com
X-Spam-Level:
X-Spam-Status: No, score=-1.9 required=5.0 tests=ALL_TRUSTED,BAYES_00,
        MISSING_HEADERS autolearn=no version=3.3.1
Received: from localhost (localhost [127.0.0.1])
        by example.com (8.14.4/8.14.4) with SMTP id t6HITQXA020072
        for [email protected]; Fri, 17 Jul 2015 20:30:06 +0200
Date: Fri, 17 Jul 2015 20:29:26 +0200
From: [email protected]
Message-Id: <[email protected]>
Subject: test
X-header: do not try

this at home

start the body

Com uma nova linha adicional entre a continuação do cabeçalho original e o "novo" início do corpo.

    
por 17.07.2015 / 20:18