check_host() İşlevi
Önceki Epostada Alanların Kullanım Yetkilendirilmesi için Gönderici Politik Çerçevesi (SPF), 1. Sürüm Sonraki
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*.
Argümanlar
check_host() işlevi şu argümanları 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> argümanı 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 argümanlara ihtiyaç duyabilir.
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.
İ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.
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.
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:
  1. 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 bir BOŞLUK veya kayıt sonu ile sonlandığına dikkat ediniz. "v=spf10" içeren sürüm bölümlü bir kayıt uygun değildir ve iptal edilmelidir.
  2. 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*.
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*.
Terim Değerlendirme
İki tür terim vardır: mekanizmalar ve değiştiriciler. 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-dizgesinin 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 mekanizmalardı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.
Mekanizmalar
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ı niteleyiciler 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ı mekanizmalar Mekanizma Tanımları bölümünde açıklanmıştır.
Değiştiriciler
Değiştiriciler birer mekanizma değildirler: bir eşleşme ya da eşleşmeme sonucunu döndürmezler. Ek bilgi sağlarlar. Değiştiriciler kaydın değerlendirmesini doğrudan etkilemeseler de, "redirect" değiştiricisi, tüm mekanizmalar değerlendirildikten sonra etkili olur.
Ö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
Alan Belirtimi
Bu mekanizma ve değiştiricilerin 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.
Not
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.
Önceki Üst Ana Başlık Sonraki
SPF Kayıtları Başlangıç Mekanizma Tanımları
Bir Linux Kitaplığı Sayfası