[GUI] apps/host tests: assertPrivate rejects the SDDL alias LA for the built-in Administrator

Aperta Adatta ai principianti
#5,576 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 4 giorni

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
2/5
Tempo stimato
1-3 ore
Idoneità per principianti
76/100
Tipo di issue
Bug
Chiarezza
Specificata chiaramente
Stato di attività
Attiva
Stack tecnologico
javascript, node.js
Ambito
desktop, testing

Direzione di ricerca

Inizia da apps/host/tests/helpers/assert-private.mjs e confrontalo con la correzione di Terminal indicata in #3302 e PR #3406. Esegui node --test tests/model-providers.test.mjs su Windows come Amministratore integrato per riprodurre la discrepanza. Il lavoro è completo quando il controllo accetta un’ACL protetta con un ACE per l’utente corrente, quando Windows riporta il trustee come LA o come SID completo.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

Area

[GUI] (the desktop app)

Desktop app, Terminal or source?

Source (START-HERE.bat, setup.sh or a build)

What happened

apps/host/tests/helpers/assert-private.mjs:13 compares the raw DACL text to a string built from the current SID:

assert.equal(dacl, `D:PAI(A;;FA;;;${currentUserSid()})`, `ACL is not owner-only: ${sddl}`);

On a host whose account is the built-in Administrator (RID 500), makePrivate() writes the correct protected ACL with icacls /grant:r *<SID>:F /inheritance:r, but Windows renders that trustee as the SDDL alias LA in Get-Acl. The assertion then fails on an ACL that is exactly what the product code just wrote. This is the same class as #3302 and PR #3406, which fixed the Terminal's Python check and its tests by resolving the trustee; the desktop host's Node helper still compares the text.

Expected: the check passes when the file has one protected ACE naming only the current user, however Windows spells that trustee (LA or the full SID).

Suggested fix: resolve each trustee field to a string SID before comparing (as the Terminal fix does with ConvertStringSidToSidW + ConvertSidToStringSidW), or compare with EqualSid. As a minimal host-side change, accept LA when currentUserSid() ends in -500.

Smallest steps or command that reproduce it

On Windows, signed in as the built-in Administrator (SID ends in -500), from apps/host:

node --test tests/model-providers.test.mjs

Actual:

✖ connections persist, redact keys, retain unchanged keys, and validate endpoints/models
  AssertionError [ERR_ASSERTION]: ACL is not owner-only: O:LAG:S-1-5-21-<domain>-513D:PAI(A;;FA;;;LA)
  + actual   'D:PAI(A;;FA;;;LA)'
  - expected 'D:PAI(A;;FA;;;S-1-5-21-<domain>-500)'
  at assertPrivate (tests/helpers/assert-private.mjs:13:10)

Get-Acl on the same file shows a single FullControl entry for the account, and whoami /user shows S-1-5-21-<domain>-500. The ACL is private; only the notation differs.

Reproduction status

Reproduced locally

Strata version

Strata 0.2.12 (tag v0.2.12, commit 123bad4a) · engine 0.1.58

Graphics card, memory and system

RTX 4090 24 GB · 253 GB RAM · Intel Core Ultra 9 285K · Windows 11 25H2 (build 26200.8655) · account is the built-in Administrator (RID 500)

Logs

node --test tests/model-providers.test.mjs output, one failure:

ℹ fail 1
✖ failing tests:
test at tests\model-providers.test.mjs:10:1
✖ connections persist, redact keys, retain unchanged keys, and validate endpoints/models
  AssertionError [ERR_ASSERTION]: ACL is not owner-only: O:LAG:S-1-5-21-3783197670-1434537263-246626064-513D:PAI(A;;FA;;;LA)
Lingua principale
C++
Stelle
11.6k
Fork
1k
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Preparare l'ambiente

Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di Niko1221/Strata

Tutte le issue di Niko1221/Strata

Issue simili

Altre issue su C++

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.