diff --git a/README.md b/README.md index e849b44..b723f91 100644 --- a/README.md +++ b/README.md @@ -111,3 +111,13 @@ a failed export must still halt the destroy step.) incrementally, avoiding the web export's known blow-up on large lists. - **Re-import.** The output is valid mbox (proper `From ` separators, `From`-mangled bodies) and can be re-imported with `hyperkitty_import`. +- **Handoff integrity.** The archive is written by the privilege-dropped web + user into `/var/tmp`, then published by root. Root opens that file with + `O_NOFOLLOW`, copies it while computing a SHA-256, and refuses to publish + unless the digest matches the one the exporter computed over the bytes it + wrote, so a same-uid process that swaps, truncates, or corrupts the temp + file between export and publish is caught (the run fails, nothing is + published, and the destroy loop will not remove the list). A fully + compromised mailman-web process is out of scope: it builds the archive from + a database it already controls, so no file-level check downstream can vouch + for the content it produced. diff --git a/mm3-hk-export b/mm3-hk-export index c1f2721..f2ae452 100755 --- a/mm3-hk-export +++ b/mm3-hk-export @@ -73,7 +73,7 @@ EOF } result=$(mailman-web shell <