8. Makrolar

8.1. Makro Tanımları

Bazı mekanizmalar ve değiştiriciler terim parçaları üzerinde makro yorumlaması yaparlar.

alan-belirtimi   = makro-dizgesi alan-sonu
alan-sonu        = ( "." tepeyafta [ "." ] ) / makro-genleş

tepeyafta        = ( *harfrakam HARF *harfrakam ) /
                   ( 1*harfrakam "-" *( harfrakam / "-" ) harfrakam )
                   ; HRT kuralı artı ek TLD kısıtlamaları
                   ; (bkz [RFC3696], 2. bölüm)
harfrakam        = HARF / RAKAM

izahat-dizgesi    = *( makro-dizgesi / SP )

makro-dizgesi    = *( makro-genleş / makro-sabiti )
makro-genleş     = ( "%{" makro-harfi dönüştürücüler *ayraç "}" )
                   / "%%" / "%_" / "%-"
makro-sabiti     = %x21-24 / %x26-7E
                   ; "%" hariç görünür karakterler
makro-harfi      = "s" / "l" / "o" / "d" / "i" / "p" / "h" /
                   "c" / "r" / "t"
dönüştürücüler   = *RAKAM [ "r" ]
ayraç            = "." / "-" / "+" / "," / "/" / "_" / "="

Yüzde imi "%%" ile ifade edilir. "%_" makrosu tek bir " " (boşluk) olarak yorumlanır. "%-" makrosu "%20" şeklinde bir URL kodlu boşluk olarak yorumlanır.

Terim bağımsız değişkenlerinde kullanılan makro harflerinin anlamları:

s = <gönderici>
l = <gönderici>'nin yerel kısmı
o = <gönderici>'nin alanı
d = <alan>
i = <ip>
p = <ip>'nin doğrulanmış alan adı
v = <ip> bir ipv4 ise "in-addr" dizgesi, bir ipv6 ise "ip6" dizgesi
h = HELO/EHLO alanı

Sadece "exp" metni içinde kullanılabilen makro harfleri:

c = SMTP istemci IP'si (kolayca okunabilir biçim)
r = sınamayı yapan konağın alan adı
t = o an ki zaman damgası

Bir yüzde imi '{', '%', '-', '_' karakterlerini öncelemekte kullanılmamışsa sözdizimi hatası olarak yorumlanır. Yani,

-exists:%(ir).sbl.spamhaus.example.org

yanlıştır ve check_host() işlevinin "PermError" döndürmesine sebep olur. Doğrusu şöyle olmalıdır:

-exists:%{ir}.sbl.spamhaus.example.org

İsteği bağlı dönüştürücüler:

*RAKAM = sıfır veya başka rakamlar
'r'    = yedek değer, öntanımlı olarak noktalarla ayrılarak

Dönüştürücüler veya ayraçlar kullanılmışsa, bir makro harfinin değeri parçalara ayrılır. Tersine bir işlem yürütüldükten sonra ve/veya sol taraf parçaları kaldırıldıktan sonra parçalar özgün ayraç karakterleri değil "." kullanılarak biraraya getirilirler.

Öntanımlı olarak dizgeler "." (nokta) kullanılarak birbirlerinden ayrılırlar. Baştaki, sondaki ve ardarda gelen ayraçların özel olarak ele alınmadığına ve dolayısıyla parça listelerinin boş dizgeler içermeyebileceğine dikkat ediniz. SPF'nin eski gerçeklenimleri alan isimlerinden sonra nokta konmasına izin vermezdi; dolayısıyla, alan sahiplerinin bu belgeyle uyumlu gerçeklenimlerce kabul edilebilmesi için böyle isimler yayınlamaması gerekir. Makrolarda "." yerine kullanılan ayraç karakterleri belirtilebilir.

'r' dönüştürücüsü tersinir bir işlem belirtir: istemci IP'si 192.0.2.1 ise, %{i} makrosu "192.0.2.1" üretirken, %{ir} makrosu "1.2.0.192" üretir.

RAKAM dönüştürücüsü kullanılacak sağ taraf parçalarının sayısını belirtir. Eğer bir RAKAM belirtilmişse, değeri sıfır olmamalıdır *ZORUNLU*. Eğer hiç RAKAM belirtilmemişse veya değer kullanılan parça sayısından fazlasını belirtiyorsa, kullanılabilecek bütün parçalar kullanılır. Eğer RAKAM 5 ise ve 3 parça varsa, makro RAKAM'ın değeri 3'müş gibi yorumlanır. Gerçeklenimler bir alan ismindeki azami yafta sayısı olarak en azından 128 değerine destek vermelidiriler *ZORUNLU*.

"s" makrosu <gönderici> olarak yorumlanır. bir yerel kısım, de-imi ve bir alandan oluşan bir eposta adresidir. "l" makrosu yerel-kısım olarak yorumlanır. "o" makrosu ise alan olarak yorumlanır. bu değerlerin "include" ve/veya "redirect" nedeniyle ardışık yorumlama sırasında aynı kaldıklarına dikkat ediniz. Ayrıca, özgün <gönderici>'de yerel-kısım yoksa, yerine, ilk işlem sırasında "postmaster" getirileceğini unutmayınız (bkz, İlk İşlem).

IPv4 adresler için, "i" ve "c" makrolarının ikisi de standart noktalı dörtlü biçiminde yorumlanır.

IPv6 adresler için, "i" makrosu noktalı biçimde bir adrestir ve %{ir} kullanımı için tasarlanmıştır. "c" makrosu ise [RFC3513]'ün 2.2. bölümünde belirtilen ikinoktalı onaltılık biçimli bir adres olarak yorumlanır ve insanların okuması için düşünülmüştür.

"p" makrosu <ip>'nin doğrulanmış alan adı olarak yorumlanır. Doğrulanmış alan adının bulunması "ptr" bölümünde tanımlanmıştır. Eğer <alan> doğrulanmış alan adları içindeyse, onun kullanılması gerekir *ÖNERİ*, yoksa, eğer <alan>'ın bir alt alan adı varsa o kullanılmalıdır *ÖNERİ*. Aksi takdirde listedeki herhangi bir isim kullanılabilir. Eğer doğrulanmış bir alan adı yoksa veya bir DNS hatası oluşmuşsa, "unknown" dizgesi kullanılır.

"r" makrosu alıcı MTA'nın ismi olarak yorumlanır. Bunun tamamen nitelenmiş bir alan adı olması gerekir *ÖNERİ*, fakat böyle bir isim yoksa (sınama bir MUA tarafından yapılıyorsa) veya sınama önlemleri belirtilmemesini gerektiriyorsa, "unknown" dizgesi kullanılmalıdır *ÖNERİ*. Alan adı, istemci MTA'nın alıcı MTA'yı bulmak için kullandığı MX kaydında bulunan isimden farklı olabilir.

"t" makrosu, onluk tabanda, mutlak zaman başlangıcından beri (UTC olarak, 1 Ocak 1970 geceyarısından itibaren) geçen saniye sayısı olarak yorumlanır. Bu, standartlarla uyumlu çoğu kütüphanede bulunan POSIX time() işlevinden dönen değerdir.

Makro yorumunun sonucu bir alan adı sorgusunda kullanılırken, eğer yorumlanmış alan adı 253 karakteri (azami alan adı uzunluğu) aşıyorsa, baştan itibaren 253 karakter alınır.

Büyük harfli makrolar küçük harfli eşdeğerleri olarak yorumlanır ve bundan sonra URL öncelenir. [RFC3986]'da tanımlanmış "urice" karakter kümesinde bulunmayan karakterlere URL öncelemesi uygulanmalıdır.

Bilginize

Meşru eposta için makro yorumlaması sırasında DNS yaftalarında 63 karakterlik sınırın aşılamayacağına dikkat ediniz. Eposta adreslerinin yerel kısımlarında ise noktalar arasındaki dizgecikler 63 karakterden uzun olabilir.

Bilginize

Alanlar, herhangi bir mekanizma yönergesi ile birlikte "s", "l", "o" veya "h" makrosunu kullanmaktan kaçınmalıdırlar. Bu makrolar çok güçlü olduklarından ve kullanıcı temelinde kayıt yayınlamayı mümkün kıldıklarından check_host() sonucunu arabellekleyen gerçeklenimlerin yeteneklerini epeyce sınırlarlar ve DNS arabelleklerinin etkinliğini azaltırlar.

"s", "l", "o" veya "h" makrorusun içeren bir check_host() değerlendirmesi sırasında işlenen bir yönerge yoksa, değerlendirme sonucu, tüm DNS kayıtlarının uyması gereken en kısa yaşam süresince (TTL) sadece <alan> ve <ip> temelinde arabelleklenebilir.

8.2. Makro Yorumlama Örnekleri

<gönderici> strong-bad@email.example.com, IPV6 SMTP istemcisi 192.0.2.3, IPV4 SMTP istemcisi 2001:DB8::CB01 ve istemci IP'nin PTR alan adı mx.example.org olmak üzere:

makro                          yorumu
-------  ----------------------------
%{s}     strong-bad@email.example.com
%{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-}                     bad.strong
%{l1r-}                        strong

makro-dizgesi                                                 yorumu
--------------------------------------------------------------------
%{ir}.%{v}._spf.%{d2}             3.2.0.192.in-addr._spf.example.com
%{lr-}.lp._spf.%{d2}                  bad.strong.lp._spf.example.com

%{lr-}.lp.%{ir}.%{v}._spf.%{d2}
                    bad.strong.lp.3.2.0.192.in-addr._spf.example.com

%{ir}.%{v}.%{l1r-}.lp._spf.%{d2}
                        3.2.0.192.in-addr.strong.lp._spf.example.com

%{d2}.trusted-domains.example.net
                             example.com.trusted-domains.example.net

IPv6:
%{ir}.%{v}._spf.%{d2}                               1.0.B.C.0.0.0.0.
0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.B.D.0.1.0.0.2.ip6._spf.example.com