🔒 Repository is read-only – file editing is disabled.

PaganLinux/tmp-fix-libpwquality.py main

49 linii Raw ← Powrót
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
#!/usr/bin/env python3
"""libpwquality: dodaje brakujace zaleznosci runtime.

pam_pwquality.so i libpwquality.so.1 maja NEEDED libcrack.so.2 (pakiet cracklib)
oraz libpam.so.0 (pakiet pam), a receptura miala depends: [] (cracklib tylko
w makedepends). Odkad shadow uzywa pam_pwquality jako modulu 'required'
w system-password, brak cracklib na systemie = brak mozliwosci zmiany hasla.
"""
import sys

import yaml

P = "/var/lib/pagan-sync/recipes/utils/libpwquality/PAGBUILD.yaml"
APPLY = "--apply" in sys.argv

text = open(P, newline="", encoding="utf-8").read()
before = yaml.safe_load(text)

if before.get("depends") != []:
    print(f"UWAGA: depends nie jest puste: {before.get('depends')!r} - przerywam")
    sys.exit(1)
if text.count("depends: []") != 1:
    print("BLAD: nie znalazlem dokladnie jednego 'depends: []'")
    sys.exit(1)

new = text.replace("depends: []", "depends:\n- pam\n- cracklib", 1)

old_rel = before.get("pkgrel")
new_rel = str(int(str(old_rel)) + 1)
assert f"pkgrel: '{old_rel}'" in new, "nie znalazlem pkgrel w formie z cudzyslowem"
new = new.replace(f"pkgrel: '{old_rel}'", f"pkgrel: '{new_rel}'", 1)

after = yaml.safe_load(new)

print("depends  :", after["depends"])
print("pkgrel   :", old_rel, "->", after["pkgrel"])
changed = [k for k in set(before) | set(after) if before.get(k) != after.get(k)]
print("zmienione klucze:", changed)
ok = (after["depends"] == ["pam", "cracklib"] and set(changed) == {"depends", "pkgrel"})
print("walidacja:", "OK" if ok else "BLAD")
if not ok:
    sys.exit(1)

if APPLY:
    with open(P, "w", newline="", encoding="utf-8") as f:
        f.write(new)
    print("ZAPISANO")
else:
    print("DRY-RUN")