connect fix 4
This commit is contained in:
@ -162,7 +162,13 @@ async def open_tunnel(
|
||||
return GuacdTunnel(reader, writer, connection_id)
|
||||
|
||||
|
||||
def build_rdp_params(host: dict, password: str) -> dict[str, str]:
|
||||
def build_rdp_params(
|
||||
host: dict,
|
||||
password: str,
|
||||
*,
|
||||
username: str | None = None,
|
||||
domain: str | None = None,
|
||||
) -> dict[str, str]:
|
||||
"""Baut die Parameter-Map fuer die connect-Instruktion aus dem Host-Datensatz.
|
||||
|
||||
Sicherheitsdefaults (siehe Konzept 6.3/6.7): NLA wird erzwungen sofern
|
||||
@ -171,17 +177,19 @@ def build_rdp_params(host: dict, password: str) -> dict[str, str]:
|
||||
ohne interne PKI praesentiert jedes Windows-Ziel ein selbstsigniertes
|
||||
Zertifikat, guacd/FreeRDP bricht dann bereits vor dem ersten Bild ab.
|
||||
|
||||
`username`/`domain` kommen aus rdp_credentials (Migration 0010) -- der
|
||||
Benutzername gehoert zur Anmeldung, nicht zum Zielsystem. Fehlen sie, wird
|
||||
auf hosts.rdp_username/rdp_domain zurueckgegriffen (Altbestand).
|
||||
|
||||
WICHTIG: `host` muss aus app.ssh_proxy.proxy.load_host() stammen. Diese
|
||||
Funktion liest rdp_username/rdp_domain/rdp_require_nla/clipboard_enabled/
|
||||
rdp_ignore_cert -- genau diese Spalten hat load_host() frueher NICHT
|
||||
selektiert, wodurch hier still ein leerer Benutzername in die
|
||||
connect-Instruktion ging und die Anmeldung am Zielsystem zwangslaeufig
|
||||
scheiterte. Fehlt eine der Spalten jetzt trotzdem, ist das ein
|
||||
Programmierfehler und soll auffallen statt still zu einer kaputten
|
||||
Verbindung zu fuehren.
|
||||
Funktion liest rdp_require_nla/clipboard_enabled/rdp_ignore_cert -- genau
|
||||
diese Spalten hat load_host() frueher NICHT selektiert, wodurch hier still
|
||||
eine unbrauchbare connect-Instruktion entstand. Fehlt eine der Spalten
|
||||
jetzt trotzdem, ist das ein Programmierfehler und soll auffallen statt
|
||||
still zu einer kaputten Verbindung zu fuehren.
|
||||
"""
|
||||
missing = [
|
||||
key for key in ("rdp_username", "rdp_require_nla", "clipboard_enabled", "rdp_ignore_cert")
|
||||
key for key in ("rdp_require_nla", "clipboard_enabled", "rdp_ignore_cert")
|
||||
if key not in host
|
||||
]
|
||||
if missing:
|
||||
@ -189,20 +197,25 @@ def build_rdp_params(host: dict, password: str) -> dict[str, str]:
|
||||
f"Hostdatensatz unvollstaendig, fehlende Felder: {', '.join(missing)}"
|
||||
)
|
||||
|
||||
username = (host.get("rdp_username") or "").strip()
|
||||
if not username:
|
||||
# Benutzername/Domaene kommen seit Migration 0010 aus den Zugangsdaten
|
||||
# (rdp_credentials). Der Wert am Host wird nur noch als Fallback fuer
|
||||
# Datensaetze gelesen, die vor der Migration angelegt wurden.
|
||||
effective_username = (username or "").strip() or (host.get("rdp_username") or "").strip()
|
||||
if not effective_username:
|
||||
raise GuacamoleProtocolError(
|
||||
"Fuer diesen Host ist kein RDP-Benutzername hinterlegt "
|
||||
"(Adminbereich -> Server -> RDP-Benutzer)."
|
||||
"Fuer diesen Host ist kein RDP-Benutzername hinterlegt. Der Benutzername "
|
||||
"gehoert zu den Zugangsdaten (Adminbereich -> Zugangsdaten -> "
|
||||
"RDP/Windows-Passwoerter)."
|
||||
)
|
||||
effective_domain = (domain or "").strip() or (host.get("rdp_domain") or "").strip()
|
||||
|
||||
clipboard_enabled = bool(host.get("clipboard_enabled"))
|
||||
return {
|
||||
"hostname": host["address"],
|
||||
"port": str(host["port"]),
|
||||
"username": username,
|
||||
"username": effective_username,
|
||||
"password": password,
|
||||
"domain": host.get("rdp_domain") or "",
|
||||
"domain": effective_domain,
|
||||
"security": "nla" if host.get("rdp_require_nla", True) else "any",
|
||||
"ignore-cert": "true" if host.get("rdp_ignore_cert", True) else "false",
|
||||
"disable-audio": "true",
|
||||
|
||||
Reference in New Issue
Block a user