fix(check): Log-Verzeichnis darf beim Start angelegt werden

Der Audit-Logger legt sein Verzeichnis per MkdirAll selbst an, check brach
aber ab, wenn es noch nicht existierte — der Pruefer war strenger als die
Laufzeit und blockierte die Erstinbetriebnahme. Fehlt zusaetzlich das
uebergeordnete Verzeichnis, bleibt es ein Fehler: dann steckt fast immer
ein Tippfehler im Pfad.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NBHF4R9EAejDJUMdwr6C68
This commit is contained in:
Carsten Abele 2026-08-14 10:14:06 +02:00
parent 6694aa5d2e
commit a2bce25424
2 changed files with 80 additions and 10 deletions

View file

@ -152,10 +152,43 @@ func TestLooseTLSKeyIsDetected(t *testing.T) {
func TestMissingLogDirectoryIsDetected(t *testing.T) {
c := newChecker(t, &fakePinger{at: checkNow}, &fakeDir{dn: "CN=x"})
// Auch das übergeordnete Verzeichnis existiert nicht — das ist ein
// echter Konfigurationsfehler, meist ein Tippfehler im Pfad.
c.Cfg.Logging.AuditLog = "/gibt/es/nicht/audit.log"
rep := c.Run(context.Background(), "")
if rep.OK() {
t.Fatal("fehlendes Log-Verzeichnis muss auffallen")
t.Fatal("fehlendes Log-Verzeichnis mit fehlendem Elternverzeichnis muss auffallen")
}
if out := report(t, rep); !strings.Contains(out, "/gibt/es/nicht") {
t.Errorf("der beanstandete Pfad muss genannt werden:\n%s", out)
}
}
func TestLogDirectoryIsAcceptedIfItCanBeCreated(t *testing.T) {
// Der Audit-Logger legt sein Verzeichnis beim Start selbst an. Der Check
// darf deshalb nicht strenger sein als die Laufzeit: existiert das
// Elternverzeichnis, ist alles in Ordnung.
c := newChecker(t, &fakePinger{at: checkNow},
&fakeDir{dn: "CN=VPN-Users,DC=firma,DC=local"})
parent := filepath.Dir(filepath.Dir(c.Cfg.Logging.AuditLog))
c.Cfg.Logging.AuditLog = filepath.Join(parent, "nochnichtda", "audit.log")
rep := c.Run(context.Background(), "")
if !rep.OK() {
t.Fatalf("noch nicht angelegtes Log-Verzeichnis darf nicht scheitern:\n%s", report(t, rep))
}
if out := report(t, rep); !strings.Contains(out, "wird beim Start angelegt") {
t.Errorf("der Hinweis auf die spätere Anlage fehlt:\n%s", out)
}
}
func TestLogDirectoryWithLoosePermissionsStillFails(t *testing.T) {
// Ein existierendes, zu offenes Verzeichnis bleibt ein Fehler.
c := newChecker(t, &fakePinger{at: checkNow}, &fakeDir{dn: "CN=x"})
os.Chmod(filepath.Dir(c.Cfg.Logging.AuditLog), 0o777)
rep := c.Run(context.Background(), "")
if rep.OK() {
t.Fatal("0777-Log-Verzeichnis muss weiterhin auffallen")
}
}