spf-discuss
[Top] [All Lists]

Re: Email Forwarder's Protocol ( EFP )

2005-02-22 20:41:17
David MacQuigg wrote:

At 01:24 AM 2/23/2005 +0100, Alex wrote:

Trace headers have a long history...  Are you sure this 
is "new" ?

Using Received: headers is certainly a possibility, 

[snip]

RFC2822 defines the Received header as follows:
received  =  "Received:" name-val-list ";" date-time CRLF
I can't find anything further on the details of the 
name-val-list.  Has this been formalized in some other 
document?

I assume the reason people developed new headers like 
Received-SPF was to avoid these problems.

-- Dave

Do you mean these lines on pp 28 of RFC2822?  

----------------------------------------------------------------------
received        =       "Received:" name-val-list ";" date-time CRLF

name-val-list   =       [CFWS] [name-val-pair *(CFWS name-val-pair)]

name-val-pair   =       item-name CFWS item-value

item-name       =       ALPHA *(["-"] (ALPHA / DIGIT))

item-value      =       1*angle-addr / addr-spec /
                         atom / domain / msg-id
----------------------------------------------------------------------

name-val-list is defined on the line below the definition of 
'received'

These definitions seem to be a variation on BNF.  

Please see, "What is BNF notation?"; 
http://cui.unige.ch/db-research/Enseignement/analyseinfo/AboutBNF.html 

... and also "Backus Normal Form vs. Backus Naur Form"; 
http://spirit.sourceforge.net/dl_docs/bnf.html 

BTW, BNF is also associated with giving a formal definition of a 
computer programming language ... and therefore also the formal 
definition (we compiler writers call them 'specs') of the 
compiler for that computer language.  

BNF is also used to define command lines.  

Some of the terms here are defined elsewhere in this document 
... you might want to read 'chapter 3. Syntax' instead of 
relying 100% on my 'off the cuff' explanation.  


AFAIK, this is how to read the definitions in RFC2822 ... 

"something" is the literal 'something'

CFWS is comment folding whitespace

FWS is folding white space

date-time is obvious

CRLF is an end of line symbol

something inside a pair of square brackets [] is optional

something inside *() can occur 1 or more times

something inside [*()] can occur 0 or more times

forward slash "/" is a choice ... 
i.e. A / B ... either format, A or B is valid 

ALPHA is any letter (A to Z, a to z)... plus some others 
... anyway they are defined in 'Chapter 3 SYNTAX'  

DIGIT is an single digit (0 to 9)

Thus the structure ALPHA *(["-"] (ALPHA / DIGIT)) means that 
a valid token must begin with a letter and may be followed 
by any number or combination of letters, dash, or digits.  

At this point you should be able to read what is there.  
If not, please feel free ask again.  

-- 
Martin G. Diehl

http://www.renderosity.com/gallery.ez?ByArtist=Yes&Artist=MGD

Reality: That which remains after you stop thinking about it.
  inspired by P. K. Dick