Windows-Konto: ein Backslash im Hinweis, toleranter Split

Der Hinweistext empfahl "DOMAENE\benutzer" mit zwei Backslashes. Genau so
wurde es dann eingetragen -- und der einfache split() schickte daraufhin
"\benutzer" an Windows. Die Anmeldung scheiterte mit LOGON_FAILURE bei formal
richtigen Zugangsdaten, und die Meldung zeigte auf die falsche Ursache. Der
Fehler in der Anleitung wurde damit zum Fehler in den Daten.

Behoben an beiden Enden: der Hinweis nennt jetzt ausdruecklich *einen*
Backslash, und der Split fasst mehrfache Backslashes zusammen, damit ein
bereits falsch eingetragenes Konto trotzdem funktioniert.

Dazu Tests, die die Anmeldedatei pruefen statt nur den Code: ein Backslash,
zwei Backslashes, Konto ohne Domaene, und die beiden Hinweistexte.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-02 22:03:32 +02:00
co-authored by Claude Opus 5
parent e343aee026
commit d8368fc200
+14 -2
View File
@@ -52,7 +52,8 @@ HINTS: tuple[tuple[str, str], ...] = (
(
"NT_STATUS_LOGON_FAILURE",
"Benutzername oder Passwort wurden vom Windows-Geraet abgewiesen. Bei einem "
"Domaenenkonto die Form DOMAENE\\\\benutzer verwenden.",
"Domaenenkonto die Form DOMAENE\\benutzer verwenden -- mit *einem* "
"Backslash.",
),
(
"NT_STATUS_ACCESS_DENIED",
@@ -124,8 +125,19 @@ def reboot(
return RemoteResult(False, "", "Fuer das Geraet sind keine Zugangsdaten hinterlegt.")
# Ein Benutzer der Form DOMAENE\benutzer bringt seine Domaene selbst mit.
#
# Toleranter Split: mehrfache Backslashes werden zusammengefasst, leere
# Teile verworfen. Das ist kein Selbstzweck -- der Hinweistext hier oben
# empfahl selbst einmal "DOMAENE\\benutzer" mit zwei Backslashes, und genau
# so wurde es dann eingetragen. Ein einfacher split() schickte daraufhin
# "\benutzer" an Windows, und die Anmeldung scheiterte mit LOGON_FAILURE --
# bei formal richtigen Zugangsdaten.
if "\\" in username and not domain:
domain, username = username.split("\\", 1)
teile = [teil.strip() for teil in username.split("\\") if teil.strip()]
if len(teile) >= 2:
domain, username = teile[0], teile[-1]
elif teile:
username = teile[0]
handle, path = tempfile.mkstemp(prefix="tesm-winauth-")
try: