#!/usr/bin/env python3 """Zapisuje czytelny raport z audytow: https, martwe zrodla, przestarzale sumy.""" import json import collections import re OUT = "/root/raport-receptury-seci-20260915.txt" audit = json.load(open("/tmp/https-audit.json")) stale = json.load(open("/tmp/sum-staleness.json")) L = [] L.append("=" * 78) L.append("RAPORT AUDYTU RECEPTUR - hardening (punkty 3, 5, 6, 7, 8)") L.append("=" * 78) L.append("") L.append("1. http:// -> https:// (punkt 7)") L.append("-" * 78) for cls in ("SAFE_HTTPS", "SAFE_HTTPS_UNVERIFIED", "CONTENT_DIFF", "HTTP_ONLY", "BOTH_DEAD", "UNRESOLVED"): L.append(f" {cls:24s}: {len(audit.get(cls, []))}") L.append("") L.append(" Podmieniono: 874 wystapien (859 SAFE_HTTPS + 1 UNVERIFIED + 14 CONTENT_DIFF") L.append(" zweryfikowanych bajtowo) w 638 recepturach.") L.append("") L.append("2. URL-e dzialajace TYLKO po http - NIE zmienione (podmiana zepsulaby build)") L.append("-" * 78) hosts = collections.Counter() for i in audit["HTTP_ONLY"]: m = re.match(r"^https?://([^/]+)", i["expanded"]) hosts[m.group(1) if m else "?"] += 1 for h, n in hosts.most_common(): L.append(f" {n:4d} {h}") L.append("") L.append(" Pelna lista URL-i:") for i in sorted(audit["HTTP_ONLY"], key=lambda x: x["expanded"]): L.append(f" {i['recipe']:52s} {i['expanded']}") L.append("") L.append("3. Zrodla martwe po obu schematach (http i https) - do naprawy receptur") L.append("-" * 78) L.append(f" Razem: {len(audit['BOTH_DEAD'])}") for i in sorted(audit["BOTH_DEAD"], key=lambda x: x["expanded"]): L.append(f" {i['recipe']:52s} {i['expanded']}") L.append("") L.append("4. Sumy SHA256 starsze niz zmiana wersji zrodla (punkt 3 - ryzyko)") L.append("-" * 78) L.append(" Heurystyka: ostatnia zmiana 'pkgver'/'source' jest nowsza niz ostatnia") L.append(" zmiana 'sha256sums', czyli sumy nie zostaly przeliczone po podbiciu wersji.") L.append(" To dokladnie klasa bledu, ktora zepsula util-linux 2.42.2.") L.append(f" Podejrzanych: {len(stale)}") L.append("") for s in stale: L.append(f" {s['recipe']}") L.append(f" zmiana wersji : {s['ver_commit'][:10]} {s['ver_subject']}") L.append(f" zmiana sum : {(s['sum_commit'] or 'BRAK')[:10]} {s['sum_subject']}") L.append("") L.append(" Weryfikacja: pagsync --fix-sha (przeliczy sumy) albo reczne sprawdzenie") L.append(" przez pobranie zrodla i porownanie z suma w recepturze.") L.append("") text = "\n".join(L) + "\n" open(OUT, "w").write(text) print(f"zapisano {OUT}") print(f"linii: {len(L)}") print() print(text[:3000])