fix: WinRM NTLM username normalize and hostname-first targets (0.10.3)

This commit is contained in:
2026-06-20 00:10:52 +10:00
parent 2fe492b06b
commit c8e3eef9d7
8 changed files with 105 additions and 29 deletions
+15 -3
View File
@@ -21,10 +21,22 @@ class WinAdminConfig:
return bool(self.user.strip() and self.password.strip())
def normalize_win_admin_user(user: str) -> str:
"""DOMAIN\\user — один обратный слэш; убрать лишнее экранирование из env/UI."""
text = user.strip()
if not text:
return ""
text = text.replace("\\\\", "\\")
if "\\" not in text and "@" not in text and "/" not in text:
# NETBIOS\user без слэша — не трогаем (оператор допишет в UI)
return text
return text
def _win_admin_from_env() -> WinAdminConfig:
settings = get_settings()
return WinAdminConfig(
user=settings.sac_win_admin_user.strip(),
user=normalize_win_admin_user(settings.sac_win_admin_user),
password=settings.sac_win_admin_password,
source="env",
)
@@ -45,7 +57,7 @@ def get_effective_win_admin_config(db: Session | None = None) -> WinAdminConfig:
if row is None:
return env_cfg
user = (row.win_admin_user or "").strip() or env_cfg.user
user = normalize_win_admin_user((row.win_admin_user or "").strip() or env_cfg.user)
password = (row.win_admin_password or "") or env_cfg.password
has_db_values = bool((row.win_admin_user or "").strip() or (row.win_admin_password or "").strip())
return WinAdminConfig(
@@ -73,7 +85,7 @@ def upsert_win_admin_settings(
db.add(row)
if user is not None and user.strip():
row.win_admin_user = user.strip()
row.win_admin_user = normalize_win_admin_user(user)
if password is not None and password.strip():
row.win_admin_password = password