sftpcast

package
v1.2.0 Latest Latest
Warning

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

Go to latest
Published: Sep 14, 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