umbau 1.2
This commit is contained in:
@ -36,8 +36,25 @@ def rdp_drive_path(host_id: int, session_id: int) -> Path:
|
||||
A sah/ueberschrieb/las die Dateien von B. Je-Sitzung-Pfade schliessen das
|
||||
aus; Aufraeumen beim Sitzungsende siehe app/rdp_proxy/ws_tunnel.py
|
||||
(`_cleanup_rdp_drive_path`).
|
||||
|
||||
Bug-Fix (Live-Test, 2./3.9.): urspruenglich als ZWEI Verzeichnis-Ebenen
|
||||
unter rdp-drives/ angelegt (.../rdp-drives/{host_id}/{session_id}).
|
||||
guacds RDP-Parameter "create-drive-path" legt aber nachweislich NUR das
|
||||
direkte Blattverzeichnis an, keine fehlenden Elternverzeichnisse (kein
|
||||
"mkdir -p") -- fuer einen Host, der noch keine Sitzung mit Dateitransfer
|
||||
hatte, existierte .../rdp-drives/{host_id}/ nie, wodurch guacd mit
|
||||
"Unable to create directory ... No such file or directory" abbrach. Ein
|
||||
Versuch, das Elternverzeichnis stattdessen im App-Prozess selbst
|
||||
anzulegen, scheiterte am echten Testserver an den Dateirechten (rdp-drives/
|
||||
gehoert dem guacd-Systembenutzer, Modus 750 -- der App-Prozess hat dort
|
||||
keinerlei Zugriff). Deshalb jetzt EINE flache Ebene mit host_id UND
|
||||
session_id im Verzeichnisnamen selbst: weiterhin pro Sitzung eindeutig
|
||||
(Befund E6 bleibt gewahrt), aber guacd muss nur noch einen einzigen neuen
|
||||
Eintrag direkt unter dem bereits existierenden rdp-drives/ anlegen --
|
||||
funktioniert nachweislich, siehe Docstring oben ("vorher war der Pfad NUR
|
||||
je Host angelegt", also genau diese Verschachtelungstiefe).
|
||||
"""
|
||||
return settings.data_dir / "rdp-drives" / str(host_id) / str(session_id)
|
||||
return settings.data_dir / "rdp-drives" / f"{host_id}_{session_id}"
|
||||
|
||||
# Der von "connect"/"select" bis zur eigentlichen Bilduebertragung genutzte
|
||||
# StreamReader-Puffer muss groesser als der asyncio-Default (64 KiB) sein --
|
||||
|
||||
@ -419,20 +419,18 @@ async def rdp_tunnel(
|
||||
host, password.decode(), session_id=session_id, username=cred_row[1], domain=cred_row[2],
|
||||
client_name=f"jumphost-{user.username}", timezone=safe_timezone,
|
||||
)
|
||||
if host.get("file_transfer_enabled"):
|
||||
# Bug-Fix (Live-Test, RDP-Teilstrecke, 2.9.): guacd/FreeRDPs
|
||||
# "create-drive-path" legt nur das BLATT-Verzeichnis an, keine
|
||||
# fehlenden Elternverzeichnisse (kein "mkdir -p"). Bisher wurde
|
||||
# ausschliesslich data_dir/recordings_dir beim Start angelegt
|
||||
# (siehe app/db.py) -- das Elternverzeichnis .../rdp-drives/<host_id>/
|
||||
# existierte fuer einen frischen Host nie, wodurch guacd mit
|
||||
# "Unable to create directory ... No such file or directory"
|
||||
# abbrach. Deshalb hier explizit VOR dem Tunnelaufbau mit
|
||||
# parents=True anlegen (blockierendes Datei-I/O -> Thread, wie
|
||||
# bei _cleanup_rdp_drive_path()).
|
||||
await asyncio.to_thread(
|
||||
rdp_drive_path(host_id, session_id).mkdir, parents=True, exist_ok=True
|
||||
)
|
||||
# Bug-Fix (Live-Test, RDP-Teilstrecke, 2./3.9.): ein erster Versuch,
|
||||
# das Elternverzeichnis hier im App-Prozess per mkdir(parents=True)
|
||||
# anzulegen, ist am echten Testserver an den Dateirechten gescheitert
|
||||
# ("/var/lib/jumphost/rdp-drives" gehoert dem guacd-Systembenutzer,
|
||||
# Modus 750 -- der App-Prozess (Benutzer "jumphost") hat dort gar
|
||||
# keinen Zugriff, auch nicht zum Anlegen). Der eigentliche Fix liegt
|
||||
# deshalb in rdp_drive_path() (siehe guacd_client.py): eine flache,
|
||||
# aber weiterhin pro Sitzung eindeutige Pfadstruktur, die guacds
|
||||
# eigenes "create-drive-path" (das nachweislich NUR das direkte
|
||||
# Blattverzeichnis anlegt, siehe Docstring dort) ohne fehlendes
|
||||
# Elternverzeichnis anlegen kann -- ohne dass der App-Prozess selbst
|
||||
# in rdp-drives/ schreiben muesste.
|
||||
tunnel = await open_tunnel(
|
||||
guacd_host=settings.guacd_host, guacd_port=settings.guacd_port,
|
||||
protocol="rdp", params=params, screen_width=width, screen_height=height, dpi=dpi,
|
||||
|
||||
Reference in New Issue
Block a user