#!/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")