fix(hub): make Hub login verification loadable and diagnosable
Correction to the patch-0002 report: after a reboot the Hub icon asks for a password AND the correct free (desktop) password is rejected there, while desktop sign-in accepts it. Patch 0002/0003 explain the icon prompt (legacy hub_manual_logout cookie; fixed in 0003), but the rejection itself means verify_system_password() never gets a conclusive crypt answer in the Hub unit and its PAM fallback cannot load either: on NixOS a bare libcrypt.so.1/libpam.so.0 resolves through LD_LIBRARY_PATH or not at all (or to glibc's failure-token stub), and until now every stage failed silently into a generic 'Incorrect password'. password-model.nix now puts pkgs.libxcrypt and pkgs.pam on sovran-hub-web's LD_LIBRARY_PATH so both the crypt fallbacks and PAM can actually load. verify_system_password() now logs, journal-visible and never containing a password or hash: the shadow hash scheme, every libcrypt source tried and whether it loaded, and PAM's service + return code when it has to decide.
This commit is contained in:
1 parent
761a7d76e9
commit
e060ec96eb
3 files changed
+58
-3
No files matched your search
@@ -140,6 +140,25 @@ class WrongLibraryMustNotLockTheUserOut(unittest.TestCase):
|
||||
self.assertNotIn("sign out and back in to show it here", text)
|
||||
|
||||
|
||||
class HubUnitMustBeAbleToLoadItsVerifiers(unittest.TestCase):
|
||||
"""Patch 0002's PAM fallback could only work if libpam.so.0 is findable
|
||||
inside the Hub unit. On NixOS a bare soname resolves via LD_LIBRARY_PATH
|
||||
or not at all, so the unit must put the real libxcrypt + PAM libraries
|
||||
on it -- otherwise a correct desktop password reads as 'wrong password'
|
||||
at Hub login while the desktop accepts it."""
|
||||
|
||||
def test_hub_unit_gets_real_libcrypt_and_pam_on_library_path(self):
|
||||
nix = _read("modules", "password-model.nix")
|
||||
self.assertIn("LD_LIBRARY_PATH", nix)
|
||||
self.assertIn("pkgs.libxcrypt pkgs.pam", nix)
|
||||
|
||||
def test_no_unix_chkpwd_shortcut(self):
|
||||
# unix_chkpwd refuses (and stalls) when invoked outside pam_unix;
|
||||
# PAM is the only supported route to it.
|
||||
src = _read("app", "sovran_systemsos_web", "system_password.py")
|
||||
self.assertNotIn("_verify_via_unix_chkpwd", src)
|
||||
|
||||
|
||||
class RootHintMustNotClaimItIsTheFreePassword(unittest.TestCase):
|
||||
"""The root row in the System Passwords tile showed the free/hub hint
|
||||
verbatim. Root has no desktop or Hub sign-in, so that text was false
|
||||
|
||||
Reference in new issue
Block a user