4. check_host()
İşlevi
check_host()
işlevi SPF kayıtlarını alır, onları çözümler ve belli bir konağın belirtilen kimlikle posta gönderme izninin olup olmadığını saptamak için onları yorumlar. Bu sınamayı uygulayan posta alıcılarının check_host()
işlevini burada açıklandığı gibi doğru olarak değerlendirmeleri gerekir *ZORUNLU*.
Gerçeklenimler, bütün durumlarda sonuçlar aynı kalmak üzere, burada tanımlanmış kurallı algoritmadan farklı bir algoritma kullanabilirler *SEÇİMLİK*.
4.1. Bağımsız değişkenler
check_host()
işlevi şu bağımsız değişkenleri alır:
-
<ip>
-
Postayı teslim etmeye çalışan SMTP istemcisinin IP adresi, IPv4 veya IPv6.
-
<alan>
-
Peşinde koşulan yetkilendirme bilgisini sağlayan alan; başlangıç olarak, "MAIL FROM" veya "HELO" kimliğinin alan kısmı.
-
<gönderici>
-
"MAIL FROM" veya "HELO" kimliği.
<gönderici>
'nin alan kısmı, check_host()
ilk olarak değerlendirirken, normal olarak <alan>
bağımsız değişkeni ile aynıdır. Bununla birlikte, ardışık değerlendirmeler için bu genellikle doğru olmayacaktır (bkz, "include
").
check_host()
işlevinin asıl gerçeklenimleri ek bağımsız değişkenlere ihtiyaç duyabilir.
4.2. Sonuçlar
check_host()
işlevi Sonucun Yorumlanması bölümünde açıklanan çeşitli sonuçlardan birini döndürebilir. Sonuca bağlı olarak, eylem alıcının yerel politikasına göre saptanır.
4.3. İlk İşlem
Eğer <alan>
bozuksa (63 karakterden uzun, sonda olmayan sıfır uzunluk, vs.) veya tamamen nitelenmiş alan adı değilse ya da DNS sorgusu "alan mevcut değil" (RCODE 3) diye bir sonuç döndürüyorsa, check_host()
işlevi anında "None
" sonucunu döndürür.
Eğer <gönderici>
bir yerel kısım içermiyorsa, yerel kısmın "postmaster" olduğu varsayılır.
4.4. Kayıt Arama
Kayıtların nasıl yayınlandıklarına bağlı olarak (bkz, Yayınlama), TXT
, SPF
veya her ikisinin de sorgulanması, <alan>
için bir DNS sorgusu yapılmasını gerektirir. Eğer sorgu, TXT
ve SPF
özkaynak kayıtlarının her ikisi için de yapılıyorsa, sorgular aynı anda yapılabilir *SEÇİMLİK*.
Eğer yapılan tüm DNS sorguları bir sunucu başarısızlığı (RCODE 2) veya başka bir hata (RCODE 0 veya 3 dışında) ya da bir zamanaşımı döndürüyorsa, check_host()
işlevi anında "TempError
" sonucu ile çıkar.
4.5. Kayıtların Seçilmesi
Bir sürüm
bölümü ile başlayan kayıtlar:
kayıt = sürüm terimler *BOŞLUK sürüm = "v=spf1"
Sorgu tarafından döndürülen kayıtlarla başlayarak, kayıt seçimi iki adımda gerçekleşir:
-
Açıkça "v=spf1" şeklinde bir
sürüm
bölümü ile başlamayan kayıtlar iptal edilir.sürüm
bölümünün birBOŞLUK
veya kayıt sonu ile sonlandığına dikkat ediniz. "v=spf10" içerensürüm
bölümlü bir kayıt uygun değildir ve iptal edilmelidir. -
Küme içinde
SPF
türünde bir kayıt varsa,TXT
türündeki tüm kayıtlar iptal edilir.
Bu adımlardan sonra, kalan tam olarak tek bir kayıt olmalı ve değerlendirme yapılmalıdır. Eğer iki veya daha fazla kayıt kalıyorsa, check_host()
işlevi anında "PermError
" sonucu ile çıkar.
Hiçbir eşleşen kayıt dönmezse, bir SPF istemcisinin alanın bir SPF bildirimi yapmadığını varsayması gerekir *ZORUNLU*. SPF işlemi durmalı ve "None
" dönmelidir *ZORUNLU*.
4.6. Kayıt Değerlendirme
SPF kaydı seçildikten sonra, check_host()
işlevi kaydı çözümler ve o an ki sınama için bir sonuç bulmak için yorum yapar. Eğer bir sözdizimi hatası varsa, check_host()
işlevi anında "PermError
" sonucu ile çıkar.
Gerçeklenimler çözümlemek için önce kaydın tümünü seçebilir ve eğer kayıt sözdizimsel olarak iyi biçimlenmemişse "PermError
" döndürebilirler *SEÇİMLİK*. Yine de, tüm durumlarda, kaydın herhangi bir yerinde bir sözdizimi hatası saptanmış olmalıdır *ZORUNLU*.
4.6.1. Terim Değerlendirme
İki tür terim vardır: mekanizma
lar ve değiştirici
ler. Bir kayıt, (aşağıda ABNF gösterimiyle belirtilmiş olarak) bunların bir listesini içerir.
terimler = *( 1*BOŞLUK ( yönerge / değiştirici ) ) yönerge = [ niteleyici ] mekanizma niteleyici = "+" / "-" / "?" / "~" mekanizma = ( tümü / dahili / A / MX / PTR / IP4 / IP6 / mevcut ) değiştirici = sevket / izahat / bilinmeyen-değiştirici bilinmeyen-değiştirici = isim "=" makro-dizgesi isim = HARF *( HARF / RAKAM / "-" / "_" / "." )
Çoğu mekanizma
isimden sonra bir ":" veya "/" karakterine izin verir.
Bir değiştirici
daima hemen isimden sonra ve bir makro-dizgesi
nin parçası olabilen bir ":" veya "/" karakterinden önce bir eşit işareti ('=
') içerir.
Bir "=", ":" veya "/" içermeyen terimler Mekanizma
Tanımları bölümünde tanımlandığı gibi mekanizma
lardır.
[RFC4234]'teki ABNF gösterimi tanımına göre mekanizma
ve değiştirici
isimleri harf büyüklüğüne duyarsızdırlar.
4.6.2. Mekanizma
lar
Her mekanizma
soldan sağa doğru ele alınır. Bir mekanizma
yoksa, sonuç Öntanımlı Sonuç bölümünde belirtilmiştir.
Bir mekanizma
değerlendirilirken şu üçünden biri oluşur: eşleşebilir, eşleşmeyebilir ya da bir hata oluşur.
Eşleşme olursa, işlem sona erer ve niteleyici
değeri bu kaydın sonucu olarak döndürülür. Eşleşme olmazsa, işlem sonraki mekanizma
ile devam eder. Bir hata oluşursa, mekanizma
işlemi sonlanır ve hata değeri döndürülür.
Olası niteleyici
ler ve döndürdükleri sonuçlar:
"+" Pass "-" Fail "~" SoftFail "?" Neutral
Niteleyici
isteğe bağlıdır ve öntanımlı değer "+"dır.
Bir mekanizma
eşleşir ve niteleyici
"-" (eksi) olursa, "Fail
" sonucu döndürülür ve izahat-dizgesi
İzahat (exp
) bölümünde açıklandığı gibi hesaplanır.
Bellibaşlı mekanizma
lar Mekanizma
Tanımları bölümünde açıklanmıştır.
4.6.3. Değiştirici
ler
Değiştirici
ler birer mekanizma
değildirler: bir eşleşme ya da eşleşmeme sonucunu döndürmezler. Ek bilgi sağlarlar. Değiştirici
ler kaydın değerlendirmesini doğrudan etkilemeseler de, "redirect
" değiştiricisi, tüm mekanizma
lar değerlendirildikten sonra etkili olur.
4.7. Öntanımlı Sonuç
Eğer eşleşen bir mekanizma
yoksa ve bir "redirect
" değiştiricisi de belirtilmemişse, check_host()
işlevi son yönerge olarak "?all
" belirtilmiş gibi "Neutral
" sonucu ile döner. Eğer bir "redirect
" değiştiricisi belirtilmişse, check_host()
işlevi Yönlendirilmiş Sorgu (redirect
) bölümünde tanımlandığı gibi işlem yapar.
İşlemin açıkça sonlandırılabilmesi için kayıtların daima ya bir "redirect
" değiştiricisi ya da bir "all
" mekanizması içermesi gerektiğine *ÖNERİ* dikkat ediniz. Örnek:
v=spf1 +mx -all
veya
v=spf1 +mx redirect=_spf.example.com
4.8. Alan Belirtimi
Bu mekanizma
ve değiştirici
lerin bazılarının bir <alan-belirtimi>
bölümü vardır. <alan-belirtimi>
dizgesi bir makro oluşumudur (bkz, Makrolar). Sonuç dizgesi, tamamen nitelenmiş bir alan adının bilinen gösterim biçimindedir: noktalarla ayrılmış yaftalar dizisi. Bu alana belgenin devamında <hedef-ismi>
denilecektir.
Bilginize
Makro yorumlamasının sonucu bir öncelemeye konu değildir. Bu bakımdan, bu oluşum bir DNS yaftasında meşru olan tüm karakterleri üretemez (örn, denetim karakterlerini). Yine de, bu oluşum, DNS'de kullanılan işe yarar yaftaları ("_spf" gibi) ve meşru konak isimlerini ifade etmek için yeterince güçlüdür.
Birçok mekanizma için <alan-belirtimi>
isteğe bağlıdır. Sağlanmazsa, <hedef-ismi>
olarak <alan>
kullanılır.