Help us shape the future of Go! Take the 2026 Go Developer Survey

sftpcast

package
v1.3.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 16, 2026 License: Apache-2.0 Imports: 7 Imported by: 0

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

View Source
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

func Line(e sftpaudit.Event) string

* 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

func Safe(s string) string

* 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) Add

func (s *Seal) Add(line string)

Add, kayda yazılmış bir satırı mühüre katar.

func (*Seal) Events

func (s *Seal) Events() int64

Events, mühürlenen satır sayısı.

func (*Seal) Head

func (s *Seal) Head() string

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

func (s *Seal) Line() string

* 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.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL