Documentation
¶
Overview ¶
* Package sftpcast, bir SFTP denetim olayının oturum KAYDINA yazılan * satırını üretir ve o satırların mühür özetini tutar. * * ⚠️ NİYE AYRI BİR PAKET — VE GEREKÇESİ SONRADAN ORTAYA ÇIKTI. Satır * biçimi proxy'nin içinde duruyordu, çünkü tek yazan oydu. Sonra ikinci * bir okuyucu çıktı: defterdeki satırların mührü YENİDEN hesaplanıyor * (internal/verify) ve "aynı olaylar mı" sorusu ancak İKİ TARAF DA AYNI * BAYTLARI üretirse sorulabiliyor. Biçimi ikinci kez yazmak, bir gün * sessizce ayrışan iki uygulama demekti: özet tutmaz, kontrol her * oturumu "değiştirilmiş" diye raporlar, ve alarmın kendisi hatalı olur. * * ⚠️ BU PAKETİN ÇIKTISI BİR BİÇİM SÖZLEŞMESİ. Satır değişirse eski * kayıtların mührü yeniden hesaplanamaz; yani buradaki her düzeltme, * o tarihe kadarki bütün oturumların defter kontrolünü bozar. Yeni bir * alan eklemek gerekirse yeni bir mühür sürümü açılmalı, bu satırlar * oynatılmamalı — record/chain.go'daki domainSep kararının aynısı. * * ⚠️ ASIL İŞİ TEMİZLEMEK. Yol ve gerekçe metinleri KARŞI TARAFTAN * geliyor: dosya adını hedefteki kullanıcı koyuyor, gerekçe metnini * hedefin sftp-server'ı yazıyor. Bir terminal kaydına giren metin * OYNATILDIĞINDA TERMİNALDE ÇALIŞIR — içinde ESC dizisi olan bir dosya * adı, kaydı izleyen denetçinin ekranını boyayabilir, imleci * oynatabilir, satırları silebilir. Yani kaydı okunmaz ya da YANILTICI * kılabilir. Kayda giren her metin bu yüzden buradan geçiyor.
Index ¶
Constants ¶
const MaxField = 512
MaxField, kayda yazılan tek bir alanın tavanı.
⚠️ Yol uzunluğu zaten sınırlı (sftpaudit.maxPath) ama gerekçe metni hedeften geliyor ve sınırı hedef koyuyor. Kayıt satırının uzunluğu zincire giren bayt sayısıdır; sınırsız bırakmak, tek bir isteğin kaydı şişirmesine izin vermek olurdu.
- MaxField, kayda yazılan tek bir alanın tavanı. *
- ⚠️ DIŞARI AÇIK, çünkü proxy'deki stderr tamponu kendi tavanını buna
- göre kuruyor (sftpcast.go, maxCastStderrLine). İki yerde ayrı iki sabit
- dursaydı, biri değişince diğeri sessizce eski değerde kalırdı.
Variables ¶
This section is empty.
Functions ¶
func Line ¶
* Line, bir denetim olayının kayda yazılacak satırı. * * Biçim kasten sabit ve okunur: "postern sftp: <fiil> <yol>[ → <yeni>] * [(<bayt>)][ — <gerekçe>]". Satır sonu "\r\n" çünkü kayıt bir TERMİNAL * kaydı ve oynatıcı satır başı bekliyor (recordIntent'teki kalıbın aynısı).
func Safe ¶
* Safe, karşı taraftan gelen metni bir terminal kaydına konabilir * hâle getirir. * * ⚠️ YAZDIRILABİLİR OLMAYAN HER ŞEY ATILIYOR, kaçırılmıyor. Kaçırmak * (örneğin "\x1b" yazmak) metni okunur tutardı ama satırı uzatır ve * "gerçekten ne vardı" sorusunu cevaplamaz; atmak, ekranda görünenin * dosyada olanla aynı olmasını sağlıyor. Atılan bir şey olduğunu * kaybetmemek için sonuna işaret konuyor.
Types ¶
type Seal ¶
type Seal struct {
// contains filtered or unexported fields
}
* Seal, kayda giren SFTP satırlarının mührü: kaç satır ve hangi * satırlar. * * ⚠️ ÖZET SIRADAN BAĞIMSIZ: her satırın kendi özeti XOR'lanıyor, * zincirlenmiyor. Sebebi defterin kendisi — satırlar toplu yazılıyor ve * `id` ile sıralanıyor, yani aynı olay kümesi farklı sırada okunabiliyor. * Sıraya bağlı bir özet, hiçbir şey değişmemişken tutmayabilirdi. * Özetin cevapladığı soru "aynı olaylar mı"; "aynı sırada mı" değil — * sıranın kanıtı zaten satırların kendisi ve onları zincir kapsıyor. * * ⚠️ XOR'UN BEDELİ: BİRBİRİNİN AYNI İKİ SATIR BİRBİRİNİ GÖTÜRÜR. Aynı * satırdan çift sayıda silmek özeti değiştirmez. Bu yüzden özet TEK * BAŞINA kullanılmıyor: sayı da karşılaştırılıyor (verify.JournalOf) ve * çift silme sayıyı iki azaltır. İkisi birlikte, tek tek * yakalayamadıklarını yakalıyor — ve hangisinin neyi yakaladığını * bilmeden ikisinden birini atmak, kontrolü sessizce zayıflatır.
func (*Seal) Head ¶
Head, özetin onaltılık gösterimi.
⚠️ HİÇ OLAY YOKKEN DE BİR DEĞER DÖNER (sıfırların onaltılığı) ve o değer "mühür yok" demek DEĞİL. Boş bir oturumun mühür satırı hiç yazılmıyor; çağıran bu ayrımı Events()'e bakarak koruyor.
func (*Seal) Line ¶
* Line, kaydın sonuna yazılan mühür satırı. * * ⚠️ NİYE AYRI BİR SATIR. Zincir dosyanın DEĞİŞMEDİĞİNİ gösteriyor; * göstermediği şey KAÇ olayın olması gerektiği. Kaydı baştan sona * yeniden yazabilen biri zinciri de yeniden hesaplar — o sınır * SECURITY.md'de yazılı ve bu satır onu değiştirmiyor. Değiştirdiği şey * daha dar ve gerçek: satır sayısıyla özet tutmuyorsa kaydın * ORTASINDAN satır çıkarılmış demektir, ki bu zinciri yeniden * hesaplamadan yapılabilecek en kolay müdahale. * * ⚠️ "1 events" YAZIYOR VE ÖYLE KALIYOR. Tekil/çoğul düzeltmesi bir * biçim değişikliğidir: o günden önceki kayıtların mührü bir daha * okunamazdı. Bu satır insan için değil, karşılaştırma için.