Расширение макросов SPF

#macros #expand #spf #abnf

#макросы #Развернуть #spf #abnf

Вопрос:

Я пытаюсь реализовать функцию check_host на основе SPF RFC7208. Он почти готов, и осталось только расширение макросов, подробно описанное в разделе 7 (https://www.rfc-editor.org/rfc/rfc7208#section-7). Я знаю, что для этого есть доступные решения, но ради примера или практики я хочу реализовать свой собственный алгоритм. При этом у меня возникает проблема, котораяwww.example.com не соответствует описанию ABNF. Я предполагаю, что это из-за моих неправильных рассуждений, и именно поэтому я прошу о помощи.

Это ABNF, скопированный из документа:

 domain-spec      = macro-string domain-end
domain-end       = ( "." toplabel [ "." ] ) / macro-expand
toplabel         = ( *alphanum ALPHA *alphanum ) /
                  ( 1*alphanum "-" *( alphanum / "-" ) alphanum )
alphanum         = ALPHA / DIGIT
explain-string   = *( macro-string / SP )
macro-string     = *( macro-expand / macro-literal )
macro-expand     = ( "%{" macro-letter transformers *delimiter "}" )
                  / "%%" / "%_" / "%-"
macro-literal    = %x21-24 / %x26-7E
                  ; visible characters except "%"
macro-letter     = "s" / "l" / "o" / "d" / "i" / "p" / "h" /
                  "c" / "r" / "t" / "v"
transformers     = *DIGIT [ "r" ]
delimiter        = "." / "-" / " " / "," / "/" / "_" / "="
  

Я думаю, что применение спецификации домена к www.example.com будет следовать по этому пути: домен-спецификация -> макрос-строка -> макро-литерал (повторяется), и это поглотит всю строку, а затем конец домена никогда не будет соответствовать.

Где я не прав?

Правка 1:

Я думаю, что я получил ответ, и исходный вопрос становится больше похожим на запрос подтверждения. Повторение в ABNF является жадным, но, вероятно, позволяет отступить — т. Е. Есть меньше, если это приведет к совпадению. Смотрим на RFC5234 (https://www.rfc-editor.org/rfc/rfc5234 ), хотя и не полностью, я не смог определенно определить это. Кто-нибудь может подтвердить?

Комментарии:

1. Не потому ли, что www.example.com это не макрос, поэтому расширять нечего?

2. Я думаю, что даже тогда грамматик должен применяться для проверки раздела спецификации домена различных механизмов.