Zum Hauptinhalt springen

7. Macros (Makros)

7. Macros (Makros)

Bei der Bewertung von SPF-Richtlinieneinträgen sind bestimmte Zeichenfolgen dazu gedacht, durch Parameter der Nachricht oder der Verbindung ersetzt zu werden. Diese Zeichenfolgen werden als "Makros" bezeichnet.

7.1 Formal Specification (Formale Spezifikation)

Die ABNF-Beschreibung für Makros lautet wie folgt:

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 (Makrodefinitionen)

Die verfügbaren Makrobuchstaben und ihre Bedeutungen sind wie folgt:

  • s = <sender>
  • l = local-part von <sender>
  • o = domain von <sender>
  • d = <domain>
  • i = <ip>
  • p = der validierte Domainname von <ip>
  • v = die in-addr.arpa-Zeichenkette für PTR-Abfragen, "in-addr" für ip4, "ip6" für ip6
  • h = HELO/EHLO-Domain

7.3 Macro Processing Details (Makroverarbeitungsdetails)

Dieser Abschnitt beschreibt den Prozess der Makroerweiterung im Detail.

Die zu erweiternde Makrozeichenkette wird in Fragmente zerlegt, die entweder mit dem "%"-Zeichen beginnen oder aus allen anderen Zeichen bestehen. Fragmente, die mit "%" beginnen, werden als "Makroerweiterungen" bezeichnet. Alle anderen Fragmente werden als "Makroliterale" bezeichnet.

Jede Makroerweiterung wird ersetzt (erweitert), um die Ergebniszeichenkette zu erzeugen. DNS-Namenslabels in dieser Ergebniszeichenkette werden durch "."-Zeichen getrennt, und jedes Label muss aus der LDH (Letter-Digit-Hyphen)-Regel bestehen: es muss vollständig aus ASCII-Kleinbuchstaben, ASCII-Ziffern und/oder Bindestrichen bestehen. Makroliterale werden im Ergebnis unverändert übernommen. Zwischen Makroerweiterungen und Makroliteralen werden keine Zeichen eingefügt.

Abgesehen von der Erweiterung wird keine Escaping- oder andere Nachverarbeitung der Ergebniszeichenkette durchgeführt; sie wird so verwendet, wie sie ist. Beachten Sie, dass dies bedeutet, dass ASCII-NUL-Zeichen nicht benötigt werden und kein Mechanismus bereitgestellt wird, um solche Zeichen in der Ergebniszeichenkette zu erzeugen.

Makrobuchstaben werden zu ihren definierten Werten erweitert, wie in Abschnitt 7.2 beschrieben, mit den folgenden Transformationen. Die Transformationssyntax wird durch die Transformers-Komponente definiert.

r transformer:

Der Buchstabe "r" gibt an, dass der Wert vor der Erweiterung umgekehrt werden soll. Für IPv6-Adressen und Domainnamen wird die Umkehrung an Punkt-Trennzeichen durchgeführt. Für IPv4-Adressen wird die Umkehrung an Punktgrenzen durchgeführt.

DIGIT transformer:

Eine oder mehrere Ziffern geben an, wie viele durch Punkte getrennte Teile vom Ende des Werts extrahiert werden sollen. Wenn Ziffern vorhanden sind, gibt dies die Anzahl der zu verwendenden Labels von rechts (höchstwertiger Wert) an.

Wenn keine Ziffer angegeben ist, werden alle Labels verwendet. Die Ziffer Null gibt an, dass eine leere Zeichenkette verwendet werden soll. Die Zeichenkette wird nach der Anwendung der Transformatoren abgeschnitten.

Delimiters:

Ein oder mehrere Trennzeichen geben an, welche Zeichen nach der Anwendung anderer Transformatoren durch das Trennzeichen "." ersetzt werden sollen. Beachten Sie, dass Trennzeichen nicht ein natürlicher Teil des Werts sind; sie werden während der Makroerweiterung angewendet. Hier sind Trennzeichen und ihre Erweiterungen:

  • %\{s} = <sender>
  • %\{o} = domain-Teil von <sender>
  • %\{d} = <domain>
  • %\{d4} = die letzten vier Labels von <domain>
  • %\{d4r} = die letzten vier Labels von <domain>, umgekehrt
  • %\{l} = local-part von <sender>
  • %\{l-} = local-part, "." ersetzt durch "-"
  • %\{lr} = local-part, umgekehrt
  • %\{lr-} = local-part, umgekehrt, "." ersetzt durch "-"
  • %\{l1r-} = der erste Teil von local-part, umgekehrt, "." ersetzt durch "-"

7.4 Expansion Examples (Erweiterungsbeispiele)

Hier sind einige Beispiele für Makroerweiterungen. Angenommen:

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

Makroerweiterungsbeispiele:

MakroErweiterungsergebnis
%\{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