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

PaganLinux/tmp-gen-report.py main

69 linii Raw ← Powrót
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
#!/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])