namespace ClawdDotNet.Core.Storage; /// /// Legt Dateien so an, dass sie unter Unix von Anfang an nur dem Besitzer gehören (#575). /// /// Warum beim Anlegen und nicht hinterher. .NET erzeugt neue Dateien mit /// 0666 & ~umask — auf Ubuntu mit der Maske 0002 also 0664. Ein /// nachträgliches lässt ein Fenster offen und /// wird an jeder neuen Schreibstelle vergessen: InstanceSettings.json ging auf der /// Test-VM beim ersten Speichern von 0600 auf 0664. /// /// Unter Windows wirkungslos; dort regelt die Vererbung aus dem Profil die Rechte. /// public static class OwnerOnlyFile { private const UnixFileMode OwnerReadWrite = UnixFileMode.UserRead | UnixFileMode.UserWrite; /// Öffnungsangaben, die eine neu entstehende Datei auf 0600 setzen. public static FileStreamOptions Options(FileMode mode, FileAccess access, FileShare share) { var options = new FileStreamOptions { Mode = mode, Access = access, Share = share }; if (!OperatingSystem.IsWindows()) options.UnixCreateMode = OwnerReadWrite; return options; } /// /// Öffnet zum Anhängen. Eine vorhandene Datei behält ihre Rechte — nur was hier neu /// entsteht, gehört dem Besitzer allein. /// public static FileStream OpenAppend(string path) => new(path, Options(FileMode.Append, FileAccess.Write, FileShare.Read)); }