[P3] Review-Sammelissue: list_scripts ohne Rollenschutz, GUAC_SECRET-Platzhalter, 50× except-pass, Reconcile für ScheduledJob #231
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Sammelissue für Befunde aus dem Code-Review, die einzeln je unter 30 Minuten liegen, aber zusammen einen Durchgang wert sind. Keine Funktionsänderung, keine Verhaltensänderung.
1.
list_scriptsohne Leseberechtigungrouters/command_router.py:181:Alle anderen Script-Endpunkte nutzen
require_role("operator"), die Log-Abfragerequire_read(). Hier reicht ein beliebiges authentifiziertes Konto — auch ein reines Mandanten-Lesekonto — um alle gespeicherten Scripts samt vollständigem Inhalt zu lesen. Scripts sind Freitext und enthalten in der Praxis Hostnamen, Pfade, gelegentlich Zugangsdaten.Zusätzlich fehlt jede Mandantenfilterung: Scripts sind global, was vermutlich beabsichtigt ist, in Kombination mit dem fehlenden Rollenschutz aber bedeutet, dass ein Kundenkonto (#224) sie sähe.
Fix:
require_role("operator")wie bei den Schreibpfaden.2. Widersprüchlicher
GUAC_SECRET-Defaultrouters/deploy_router.py:26:main.py:72bricht den Start ab, wennGUAC_SECRETgenau dieser Platzhalter oder kürzer als 32 Zeichen ist.rdp_router.py:19nutzt korrektos.getenv("GUAC_SECRET", "").Praktisch nicht ausnutzbar, weil
main.pybeim Import scheitert. Aber der Platzhalter im Code lädt dazu ein, die Fail-Fast-Prüfung später „aufzuweichen", und dann ist der schwache Default plötzlich wirksam. Fix: gleiche Form wie inrdp_router.py.3.
except Exception: pass— 50 Vorkommen140
except Exceptionim Server, davon 50 mit reinempass. Ein Teil ist legitim (Best-Effort-Notifications, WS-Close in Aufräumpfaden). Der Rest verschluckt Fehler ohne Spur.Kein Pauschalumbau. Vorgehen: jedes Vorkommen einzeln ansehen und in eine der drei Kategorien einordnen:
logger.debug/warningmit KontextErgebnis ist Nachvollziehbarkeit, keine Verhaltensänderung.
4. Routergrößen
main.pyenthält neben dem App-Setup auch Enrollment, Install-Script-Erzeugung und Binary-Auslieferung — Fachlogik, die dort nicht hingehört.Hier NICHT anfassen. Die Extraktion ist #95 und wird durch #212 (
services/guest_view.py) teilweise eingelöst. Nach #212 gehört #95 neu bewertet. Dieser Punkt steht hier nur zur Vollständigkeit des Reviews.5.
ScheduledJob.last_statusbleibt nach Absturz auf „running"reconcile_running_tasks()(admin_router.py:1020) räumt nach einem Neustart verwaisteTask-Zeilen auf, aber nichtScheduledJob.last_status.Funktional harmlos —
next_run_atwurde vor dem Lauf gesetzt, der Job läuft also wieder. Rein kosmetisch in der Anzeige. Fix: im bestehenden Reconcile-Durchganglast_status="running"auf"unknown"setzen, mit Hinweis imlast_output.Prompt für Claude Code
Definition of Done
list_scriptsrollengeschütztScheduledJobmit abAus dem Code-Review vom 2026-07-27 (Commit
4152c4d). Gesamtblock: #226, #227, #228, #229, #230, #231.Abarbeitung niedrig → hoch: #231 → #230 → #229 → #228 → #227 → #226.