add workaround for unixfrom bug in Mailman

This commit is contained in:
Max Erenberg 2022-05-01 18:23:56 -04:00 committed by Mailing List Manager
parent 35b32dc925
commit ff48bd3780
2 changed files with 12 additions and 1 deletions

View File

@ -1,6 +1,6 @@
[metadata] [metadata]
name = extra-mailman-archivers name = extra-mailman-archivers
version = 0.0.3 version = 0.0.4
author = Max Erenberg author = Max Erenberg
author_email = merenber@csclub.uwaterloo.ca author_email = merenber@csclub.uwaterloo.ca
description = Some extra archivers for Mailman 3 description = Some extra archivers for Mailman 3

View File

@ -31,6 +31,7 @@ from io import BytesIO
import logging import logging
import os import os
import tempfile import tempfile
import time
from flufl.lock import Lock from flufl.lock import Lock
from mailman.config import config from mailman.config import config
@ -90,6 +91,15 @@ class Pipermail:
:type mlist: mailman.interfaces.mailinglist.IMailingList :type mlist: mailman.interfaces.mailinglist.IMailingList
:type message: mailman.email.message.Message :type message: mailman.email.message.Message
""" """
# Workaround for a bug in Mailman which sets unixfrom to an email
# address instead of an mbox header
# https://gitlab.com/mailman/mailman/-/blob/master/src/mailman/runners/lmtp.py#L139
old_unixfrom = msg.get_unixfrom()
if old_unixfrom is not None and not old_unixfrom.startswith('From '):
# Adapted from https://github.com/python/cpython/blob/3.9/Lib/email/generator.py
msg.set_unixfrom('From ' + old_unixfrom + ' ' + time.ctime(time.time()))
# Mangle the 'From ' lines and add the Unix envelope header. # Mangle the 'From ' lines and add the Unix envelope header.
fp = BytesIO() fp = BytesIO()
g = BytesGenerator(fp, mangle_from_=True) g = BytesGenerator(fp, mangle_from_=True)
@ -135,5 +145,6 @@ class Pipermail:
finally: finally:
lock.unlock(unconditionally=True) lock.unlock(unconditionally=True)
os.unlink(tempfile_name) os.unlink(tempfile_name)
msg.set_unixfrom(old_unixfrom)
return None return None