Passa al contenuto principale

7. Macros (Macro)

7. Macros (Macro)

Durante la valutazione dei record di politica SPF, alcune sequenze di caratteri sono destinate a essere sostituite da parametri del messaggio o della connessione. Queste sequenze di caratteri sono chiamate "macro".

7.1 Formal Specification (Specifica formale)

La descrizione ABNF per le macro è la seguente:

domain-spec = macro-string domain-end
domain-end = ( "." toplabel [ "." ] ) / macro-expand

explain-string = *( macro-string / SP )

macro-string = *( macro-expand / macro-literal )
macro-literal = %x21-24 / %x26-7E
; visible characters except "%"

macro-expand = ( "%\{" macro-letter transformers *delimiter "}" )
/ "%%" / "%_" / "%-"

macro-letter = "s" / "l" / "o" / "d" / "i" / "p" / "h" /
"c" / "r" / "t" / "v"

transformers = *DIGIT [ "r" ]
delimiter = "." / "-" / "+" / "," / "/" / "_" / "="

toplabel = ( *alphanum ALPHA *alphanum ) /
( 1*alphanum "-" *( alphanum / "-" ) alphanum )
; LDH rule plus additional TLD restrictions
; (see [RFC5890], Section 2.3.1)

alphanum = ALPHA / DIGIT

ALPHA = %x41-5A / %x61-7A ; A-Z / a-z
DIGIT = %x30-39 ; 0-9

7.2 Macro Definitions (Definizioni delle macro)

Le lettere di macro disponibili e i loro significati sono i seguenti:

  • s = <sender>
  • l = local-part di <sender>
  • o = domain di <sender>
  • d = <domain>
  • i = <ip>
  • p = il nome di dominio validato di <ip>
  • v = la stringa in-addr.arpa per le query PTR, "in-addr" per ip4, "ip6" per ip6
  • h = dominio HELO/EHLO

7.3 Macro Processing Details (Dettagli dell'elaborazione delle macro)

Questa sezione descrive in dettaglio il processo di espansione delle macro.

La stringa macro in fase di espansione viene suddivisa in frammenti che iniziano con il carattere "%" o sono costituiti da tutti gli altri caratteri. I frammenti che iniziano con "%" sono chiamati "espansioni di macro". Tutti gli altri frammenti sono chiamati "letterali di macro".

Ogni espansione di macro viene sostituita (espansa) per produrre la stringa risultato. Le etichette dei nomi DNS in questa stringa risultato sono separate da caratteri ".", e ogni etichetta deve essere costituita dalla regola LDH (Letter-Digit-Hyphen): deve essere interamente composta da lettere ASCII minuscole, cifre ASCII e/o trattini. I letterali di macro vengono ripresi invariati nel risultato. Nessun carattere viene inserito tra le espansioni di macro e i letterali di macro.

Oltre all'espansione, non viene eseguito alcun escape o altra post-elaborazione sulla stringa risultato; viene utilizzata così com'è. Si noti che ciò significa che i caratteri ASCII NUL non sono necessari e non viene fornito alcun meccanismo per produrre tali caratteri nella stringa risultato.

Le lettere di macro vengono espanse ai loro valori definiti, come descritto nella Sezione 7.2, con le seguenti trasformazioni. La sintassi di trasformazione è definita dal componente transformers.

r transformer:

La lettera "r" indica che il valore deve essere invertito prima dell'espansione. Per gli indirizzi IPv6 e i nomi di dominio, l'inversione viene eseguita a livello di delimitatori di punto. Per gli indirizzi IPv4, l'inversione viene eseguita a livello di confini di punto.

DIGIT transformer:

Una o più cifre indicano quante parti separate da punti devono essere estratte dalla fine del valore. Se sono presenti cifre, questo indica il numero di etichette da utilizzare, partendo da destra (valore più significativo).

Se non viene specificata alcuna cifra, vengono utilizzate tutte le etichette. La cifra zero indica che deve essere utilizzata una stringa vuota. La stringa viene troncata dopo l'applicazione dei trasformatori.

Delimiters:

Uno o più delimitatori indicano quali caratteri devono essere sostituiti con il delimitatore "." dopo l'applicazione di altri trasformatori. Si noti che i delimitatori non sono una parte naturale del valore; vengono applicati durante l'espansione della macro. Ecco i delimitatori e le loro espansioni:

  • %\{s} = <sender>
  • %\{o} = parte dominio di <sender>
  • %\{d} = <domain>
  • %\{d4} = le ultime quattro etichette di <domain>
  • %\{d4r} = le ultime quattro etichette di <domain>, invertite
  • %\{l} = local-part di <sender>
  • %\{l-} = local-part, "." sostituito da "-"
  • %\{lr} = local-part, invertito
  • %\{lr-} = local-part, invertito, "." sostituito da "-"
  • %\{l1r-} = la prima parte di local-part, invertita, "." sostituito da "-"

7.4 Expansion Examples (Esempi di espansione)

Ecco alcuni esempi di espansione di macro. Supponiamo:

<sender> = [email protected]
<domain> = email.example.com
<ip> = 192.0.2.3

Esempi di espansione di macro:

MacroRisultato dell'espansione
%\{s}[email protected]
%\{o}email.example.com
%\{d}email.example.com
%\{d4}email.example.com
%\{d3}email.example.com
%\{d2}example.com
%\{d1}com
%\{dr}com.example.email
%\{d2r}example.email
%\{l}strong-bad
%\{l-}strong-bad
%\{lr}strong-bad
%\{lr-}strong-bad
%\{l1r-}strong-bad
%\{ir}.%\{v}._spf.%\{d2}3.2.0.192.in-addr._spf.example.com
%\{lr-}.lp._spf.%\{d2}strong-bad.lp._spf.example.com
%\{lr-}.lp.%\{ir}.%\{v}._spf.%\{d2}strong-bad.lp.3.2.0.192.in-addr._spf.example.com
%\{ir}.%\{v}.%\{l1r-}.lp._spf.%\{d2}3.2.0.192.in-addr.strong-bad.lp._spf.example.com
%\{d2}.trusted-domains.example.netexample.com.trusted-domains.example.net