Here's my alternate take: make the ABNF a lot simpler to
reflect the actual loose syntax.

    dmarc-record    = dmarc-version *(*WSP ";" *WSP dmarc-tag) *WSP *%x3b

    dmarc-tag       = 1*ALPHA %WSP '=' *WSP 1*dmarc-value

    dmarc-value     = %x20-3a | %x3c-7e ; any printing chars but semicolon

    dmarc-version   = "v" *WSP "=" *WSP %x44 %x4d %x41 %x52 %x43 %x31

Don't waste ABNF defining the tag names. Just define the values for
the various tags:

>     dmarc-request   = ( "none" / "quarantine" / "reject" )
>
>     dmarc-test      = ( "y" / "n" )
>
>     dmarc-psd       = ( "y" / "n" )
>
>     dmarc-sprequest = ( "none" / "quarantine" / "reject" )
>
>     dmarc-nprequest  = ( "none" / "quarantine" / "reject" )
>
>     dmarc-adkim     = ( "r" / "s" )
>
>     dmarc-aspf      = ( "r" / "s" )
>
    dmarc-uri       = URI
                      ; "URI" is imported from [RFC3986]; commas (ASCII
                      ; 0x2C) and exclamation points (ASCII 0x21)
                      ; MUST be encoded

>     dmarc-auri      = dmarc-uri *(*WSP "," *WSP dmarc-uri)
>
>     dmarc-furi      = dmarc-uri *(*WSP "," *WSP dmarc-uri)
>
>     dmarc-fo        = ( "0" / "1" / ( "d" / "s" / "d:s" / "s:d" ) )
>
>     dmarc-rfmt      = Keyword *(*WSP ":" Keyword)
>                       ; registered reporting formats only
>
>   "Keyword" is imported from Section 4.1.2 of [RFC5321].
>
>   dmarc-test      = ( "y" / "n" )

_______________________________________________
dmarc mailing list
dmarc@ietf.org
https://www.ietf.org/mailman/listinfo/dmarc

Reply via email to