Files
privatae-bastion/client-go/machinestore_unix_test.go
Privatae e4c9b69b46
ci / personal-data (push) Successful in 5s
ci / test (push) Successful in 3m4s
ci / fuzz (push) Successful in 3m45s
bastion 0.53.2
2026-10-20 04:42:14 +00:00

92 lines
2.9 KiB
Go

//go:build !windows
package main
// Tagged !windows for the reason singleton_test.go states: syscall.Umask does
// not exist on that target. The rest of the machine store's tests are portable
// and stay in machinestore_test.go.
import (
"os"
"path/filepath"
"syscall"
"testing"
"time"
)
// A day-file that ALREADY EXISTS with a loose mode is tightened before the
// machine's findings are appended to it.
//
// THIS IS THE TEST THE FIRST VERSION GOT WRONG, and the mutation sweep is what
// said so. That version set the umask to 0 and asserted 0600 — but a umask only
// ever clears bits, so an O_CREATE of 0600 comes out 0600 under every umask
// there is, and deleting the chmod under test left it green. What the chmod
// really guards is the file it did NOT create: O_APPEND|O_CREATE does not touch
// the mode of an existing file, so a day-file restored from a backup or copied
// in with `cp -p` keeps whatever mode it arrived with while this process writes
// the machine's findings into it.
//
// The umask is still set to 0, for a different and now-honest reason: it proves
// the 0644 below is the mode the file really has rather than one the umask
// happened to allow.
func TestAnExistingLooseDayFileIsTightenedBeforeItIsAppendedTo(t *testing.T) {
isolateConfigDir(t)
old := syscall.Umask(0)
defer syscall.Umask(old)
at := time.Date(2026, 9, 19, 10, 0, 0, 0, time.UTC)
p, err := storeDayPath(storeFindings, at)
if err != nil {
t.Fatal(err)
}
// Arrives world-readable, the way a restored or copied file does.
if err := os.WriteFile(p, []byte("{}\n"), 0o644); err != nil {
t.Fatal(err)
}
if fi, err := os.Stat(p); err != nil || fi.Mode().Perm() != 0o644 {
t.Fatalf("the fixture is not loose to begin with, so this test cannot fail: %v %v", fi, err)
}
if _, err := storeRecordPass(storeReport("base-a", storeFinding("aaa", deltaHigh)), at); err != nil {
t.Fatal(err)
}
fi, err := os.Stat(p)
if err != nil {
t.Fatal(err)
}
if fi.Mode().Perm() != 0o600 {
t.Fatalf("journal file is %v, want 0600 — the machine's own record stayed world-readable", fi.Mode().Perm())
}
}
// The writer's own state file is bookkeeping the host must not be able to
// reach: a file the host could write is a file that could suppress a finding by
// pre-declaring it open.
func TestTheWritersStateFileIsOwnerOnly(t *testing.T) {
isolateConfigDir(t)
old := syscall.Umask(0)
defer syscall.Umask(old)
at := time.Date(2026, 9, 19, 10, 0, 0, 0, time.UTC)
sp, err := storeStatePath()
if err != nil {
t.Fatal(err)
}
if err := os.MkdirAll(filepath.Dir(sp), 0o700); err != nil {
t.Fatal(err)
}
if err := os.WriteFile(sp, []byte("{}"), 0o644); err != nil {
t.Fatal(err)
}
if _, err := storeRecordPass(storeReport("base-a", storeFinding("aaa", deltaHigh)), at); err != nil {
t.Fatal(err)
}
fi, err := os.Stat(sp)
if err != nil {
t.Fatal(err)
}
if fi.Mode().Perm() != 0o600 {
t.Fatalf("store state is %v, want 0600", fi.Mode().Perm())
}
}