Konu: Ödemeli CRLF: line - neden orada ve yasal mı?


13

Popüler bir e-posta-SMS hizmetine e-posta gönderen bir NAGIOS sistemi ile ilgili bir sorunla karşılaşıyorum. E-posta-SMS hizmeti, Subject:satırda metin bulunan e-postaları alır ve bunları To:alanda kodlanmış cep telefonu numarasına gönderir . Çok uzak çok iyi. Ne yazık ki, sendmail (ve ondan önce sonek) (ille uzunluğunda) içine gereksiz CRLF takmadan gibi görünüyor Subject:hat ve benim SMS mesajı CRLF fazlalıklar atılacak neden olduğunu olduğunu ancak ve ancakSubject: satır bir veya daha fazla nokta üst üste içeren geçmiş karşılıksız CRLF.

Mesajların doğru bir şekilde oluşturulduğundan eminim, ama sadece emin olmak için, uzun bir Subject:çizgi ile kendime tamamen noddy test mesajı oluşturuyorum :

echo "foo" | mail -s "1234567 101234567 201234567 301234567 401234567 501234567 601234567 701234567 801234567 90123456789" reaper@teaparty.net

Bu Subject:satırda fazladan iki nokta olmadığını unutmayın ; burada yaptığım tek şey tel üzerine fazladan bir CRLF takıldığını gösteriyor. İşte sonucu sudo ngrep -x port 25:


44 61 74 65 3a 20 46 72    69 2c 20 33 31 20 4d 61    Date: Fri, 31 Ma
79 20 32 30 31 33 20 31    30 3a 34 33 3a 35 35 20    y 2013 10:43:55
2b 30 31 30 30 0d 0a 54    6f 3a 20 72 65 61 70 65    +0100..To: reape
72 40 74 65 61 70 61 72    74 79 2e 6e 65 74 0d 0a    r@teaparty.net..
53 75 62 6a 65 63 74 3a    20 31 32 33 34 35 36 37    Subject: 1234567
20 31 30 31 32 33 34 35    36 37 20 32 30 31 32 33     101234567 20123
34 35 36 37 20 33 30 31    32 33 34 35 36 37 20 34    4567 301234567 4
30 31 32 33 34 35 36 37    20 35 30 31 32 33 34 35    01234567 5012345
36 37 0d 0a 20 36 30 31    32 33 34 35 36 37 20 37    67.. 601234567 7
30 31 32 33 34 35 36 37    20 38 30 31 32 33 34 35    01234567 8012345
36 37 20 39 30 31 32 33    34 35 36 37 38 39 0d 0a    67 90123456789..
55 73 65 72 2d 41 67 65    6e 74 3a 20 48 65 69 72    User-Agent: Heir
6c 6f 6f 6d 20 6d 61 69    6c 78 20 31 32 2e 34 20    loom mailx 12.4
37 2f 32 39 2f 30 38 0d    0a 4d 49 4d 45 2d 56 65    7/29/08..MIME-Ve
72 73 69 6f 6e 3a 20 31    2e 30 0d 0a 43 6f 6e 74    rsion: 1.0..Cont
65 6e 74 2d 54 79 70 65    3a 20 74 65 78 74 2f 70    ent-Type: text/p
6c 61 69 6e 3b 20 63 68    61 72 73 65 74 3d 75 73    lain; charset=us

Orijinal başlıktaki 501234567ve arasındaki yaklaşık yarım (kalın + italik olarak işaretlenmiş) arasında, bir CRLF'nin takıldığını ( sol taraftaki altıgen boşluğa, sağ taraftaki düz metinde) görebilirsiniz.601234567Subject:0x0d 0x0a..

Alıcı MTA bunu işlemek için mutlu görünüyor ve alıcı ucunda diskte depolanan postaya baktığımda, Subject: satırında yalnızca bir LF (0x0a) görüyorum ve satır doğru ve onun içinde ayrıştırılıyor bütünüyle, örneğin alpine. Yine de, CRLF kabloda ve ben ve (mükemmel) e-posta-SMS destek çalışanları arasında, sorunun sorununun bu olduğunu tespit ettik.

Benim sorum şu: Bir MTA'nın tel üzerine gereksiz bir CRLF eklemesi yasal mı?

Eğer öyleyse ve bunu kanıtlayabilirsem, o zaman e-posta-SMS evin sorunu, çünkü hoşgörüsüzlük yapıyorlar. Değilse, ya da öyleyse ama kanıtlayamıyorum, o zaman benim sorunum olur, bu yüzden referanslarla bir cevap en yararlı olacaktır.

Düzenleme : Şimdi söz konusu e-posta-SMS hizmetinin kapow olduğunu temiz gelebilir . Bu sorun onlara açıklandıktan sonra, anladılar, bir düzeltmeyi geliştirmek ve test etmek için benimle çalıştılar ve düzeltmeyi dağıttılar. İki nokta üst üste işaretli uzun konu satırlarım SMS'lere doğru şekilde aktarılıyor. Normalde bireysel şirketleri trompet etmem, özellikle SF'de değil, ama kapow doğru şeyi yaptığını unutmayın. (Feragatname: Kapow ile, sorunuyla ilgilenme şeklinden memnun olan ücretli bir müşteri dışında hiçbir bağlantım yok.)

Yanıtlar:


15

RFC 822'yi anlarsam, bazı durumlarda yasaldırlar, sanırım 24x80 çözünürlüklü küçük ekran günlerinden bir eser.

Bu bölümler oldukça açık gözüküyor Konular katlanabilir ve katlama bir CRLF artı LWSP (doğrusal beyaz boşluk) karakteridir .. Supesed olmaları mümkündür, Wietse (postfix listelerinde) isterseniz RFC'lerini içeriden dışarıda bilir kesin bir cevap.

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@BBN

    and

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

    and

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

         The process of moving  from  this  folded   multiple-line
    representation  of a header field to its single line represen-
    tation is called "unfolding".  Unfolding  is  accomplished  by
    regarding   CRLF   immediately  followed  by  a  LWSP-char  as
    equivalent to the LWSP-char.

    Note:  While the standard  permits  folding  wherever  linear-
           white-space is permitted, it is recommended that struc-
           tured fields, such as those containing addresses, limit
           folding  to higher-level syntactic breaks.  For address
           fields, it  is  recommended  that  such  folding  occur
           between addresses, after the separating comma.

3.1.2.  STRUCTURE OF HEADER FIELDS

    Once a field has been unfolded, it may be viewed as being com-
    posed of a field-name followed by a colon (":"), followed by a
    field-body, and  terminated  by  a  carriage-return/line-feed.
    The  field-name must be composed of printable ASCII characters
    (i.e., characters that  have  values  between  33.  and  126.,
    decimal, except colon).  The field-body may be composed of any
    ASCII characters, except CR or LF.  (While CR and/or LF may be
    present  in the actual text, they are removed by the action of
    unfolding the field.)

    Certain field-bodies of headers may be  interpreted  according
    to  an  internal  syntax  that some systems may wish to parse.
    These  fields  are  called  "structured   fields".    Examples
    include  fields containing dates and addresses.  Other fields,
    such as "Subject"  and  "Comments",  are  regarded  simply  as
    strings of text.

    Note:  Any field which has a field-body  that  is  defined  as
           other  than  simply <text> is to be treated as a struc-
           tured field.

           Field-names, unstructured field bodies  and  structured
           field bodies each are scanned by their own, independent
           "lexical" analyzers.

 3.1.3.  UNSTRUCTURED FIELD BODIES

    For some fields, such as "Subject" and "Comments",  no  struc-
    turing  is assumed, and they are treated simply as <text>s, as
    in the message body.  Rules of folding apply to these  fields,
    so  that  such  field  bodies  which occupy several lines must
    therefore have the second and successive lines indented by  at
    least one LWSP-char.

Sorgulayan tarafından düzenleyin : Umarım NickW, RFC822'nin RFC2822 tarafından kullanılmadığına dair bir not eklediğim için beni affedecek, ancak yeni RFC, 2.2.3 bölümünde hemen hemen aynı şeyi söylüyor ve bu katlamanın açıkça doğruladığını onaylıyor daha fazla işlem yapılmadan önce kaldırılmalıdır:

Her başlık alanı, mantıksal olarak alan adı, iki nokta üst üste ve alan gövdesini içeren tek bir karakter dizisidir. Bununla birlikte, kolaylık sağlamak ve satır başına 998/78 karakter sınırlamalarını ele almak için, bir başlık alanının alan gövdesi bölümü çok satırlı bir temsile bölünebilir; buna "katlama" denir. Genel kural, bu standardın beyaz alan katlanmasına izin verdiği her yerde (sadece WSP karakterleri değil), herhangi bir WSP'den önce bir CRLF eklenebilmesidir. Örneğin, başlık alanı:

       Subject: This is a test

şu şekilde temsil edilebilir:

       Subject: This
        is a test

Not: Yapılandırılmış alan gövdeleri, katlama sözlü belirteçlerin birçoğu arasında (ve hatta bazı sözcük belirteçleri arasında) gerçekleşebilecek şekilde tanımlanmış olsa da, katlama CRLF'yi
daha üst düzey sözdizimsel kırılmalara yerleştirmekle sınırlı OLMALIDIR. Örneğin, bir alan gövdesi virgülle ayrılmış değerler olarak tanımlanırsa, katlamanın, başka bir yerde izin verilse bile, yapılandırılmış öğeleri alanın katlanabileceği diğer yerlere göre ayırdığı virgülden sonra yapılması önerilir.

Bir başlık alanının bu katlanmış çok satırlı gösteriminden tek satırlık gösterimine geçme işlemine "açılma" denir. Açma işlemi, hemen WSP tarafından takip edilen herhangi bir CRLF'nin kaldırılmasıyla gerçekleştirilir. Her başlık alanı daha fazla sözdizimsel ve anlambilimsel değerlendirme için katlanmamış formunda ele alınmalıdır.

Bu, NickW'nin beni bilmem gerekeni neredeyse tam anlamıyla bana doğru bir şekilde işaret ettiği gerçeğinden uzaklaşmak değil, sadece bu cevabın gelecekte karşılaşacak herkes için alakalı kalmasına yardımcı olmak için.


Kesinlikle kırgın değilim :)
NickW

2

Sendmail sunucusu (SendMail) SMTP satır uzunluğu sınırları uygular ancak çok daha yüksektir (smtp postaları için 990 bayt veya daha fazla).

SendMail! = SendEmail

Anladığım kadarıyla Nagios, e-posta göndermek için varsayılan olarak SendEmail istemcisini kullanıyor . Nagios'u kullandığınız e-posta istemcisi, e-posta üstbilgisi / konu satırının uzunluğuna böyle "sert" sınırlar getiriyor.

commands.cfgYapılandırma dosyasında yapılandırılmış e-posta istemcisini kontrol edin ve bildirin .
( notify-host-by-emailve notify-service-by-emailayarlar).


Satır uzunluğu sorununu ve L=/ F=Lparametrelerini biliyorum ve bunun sorun olmadığını kabul ediyorum. NAGIOS'um sadece kullanarak gönderiyor echo "" | mail -s "$VARIABLE$ $ANOTHERVAR$"- ancak her durumda, sorun bundan daha derin, bu yüzden mailyukarıdaki basit tabanlı örneği alıntıladım - NAGIOS'u resimden çıkarmak için.
MadHatter
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.