Fix chpasswd path on NixOS, add password toggle/hints/validation in change-password form

Agent-Logs-Url: https://github.com/naturallaw777/staging_alpha/sessions/de03873d-5cdb-4929-bd4a-4d306916b525

Co-authored-by: naturallaw777 <99053422+naturallaw777@users.noreply.github.com>
This commit is contained in:
copilot-swe-agent[bot]
2026-04-07 17:01:54 +00:00
committed by GitHub
parent 84124ba1b1
commit badab99242
3 changed files with 119 additions and 3 deletions

View File

@@ -9,6 +9,7 @@ import json
import os
import pwd
import re
import shutil
import socket
import subprocess
import time
@@ -2978,10 +2979,22 @@ async def api_change_password(req: ChangePasswordRequest):
if len(req.new_password) < 8:
raise HTTPException(status_code=400, detail="Password must be at least 8 characters long.")
# Locate chpasswd binary (NixOS puts it in the Nix store, not /usr/bin)
chpasswd_bin = (
shutil.which("chpasswd")
or ("/run/current-system/sw/bin/chpasswd"
if os.path.isfile("/run/current-system/sw/bin/chpasswd") else None)
)
if chpasswd_bin is None:
raise HTTPException(
status_code=500,
detail="chpasswd binary not found. Cannot update system password.",
)
# Update /etc/shadow via chpasswd
try:
result = subprocess.run(
["chpasswd"],
[chpasswd_bin],
input=f"free:{req.new_password}",
capture_output=True,
text=True,