Defective held message gives 500 error in REST api
This is complex. The problem originates with Russian spam sent to the list. Several things occurred:
The message was held and then a message (I think the held notice to the admin) was shunted:
Jun 14 02:56:12 2016 (26473) HOLD: mailman-users@mailman3.org post from jurisdictionaly@list.ru held, message-id=<20160614104741.PXDL4PINP3U@2J1.list.ru>: The message is not from a list member
Jun 14 02:56:13 2016 (26480) Uncaught runner exception: 'content-transfer-encoding'
Jun 14 02:56:13 2016 (26480) Traceback (most recent call last):
File "/usr/local/lib/python3.4/dist-packages/mailman-3.1.0-py3.4.egg/mailman/core/runner.py", line 159, in _one_iteration
self._process_one_file(msg, msgdata)
File "/usr/local/lib/python3.4/dist-packages/mailman-3.1.0-py3.4.egg/mailman/core/runner.py", line 252, in _process_one_file
keepqueued = self._dispose(mlist, msg, msgdata)
File "/usr/local/lib/python3.4/dist-packages/mailman-3.1.0-py3.4.egg/mailman/runners/outgoing.py", line 93, in _dispose
self._func(mlist, msg, msgdata)
File "/usr/local/lib/python3.4/dist-packages/mailman-3.1.0-py3.4.egg/mailman/mta/deliver.py", line 86, in deliver
refused = agent.deliver(mlist, msg, msgdata)
File "/usr/local/lib/python3.4/dist-packages/mailman-3.1.0-py3.4.egg/mailman/mta/bulk.py", line 101, in deliver
mlist, msg, msgdata, recipients)
File "/usr/local/lib/python3.4/dist-packages/mailman-3.1.0-py3.4.egg/mailman/mta/base.py", line 68, in _deliver_to_recipients
sender, recipients, msg.as_string())
File "/usr/lib/python3.4/email/message.py", line 159, in as_string
g.flatten(self, unixfrom=unixfrom)
File "/usr/lib/python3.4/email/generator.py", line 112, in flatten
self._write(msg)
File "/usr/lib/python3.4/email/generator.py", line 178, in _write
self._dispatch(msg)
File "/usr/lib/python3.4/email/generator.py", line 211, in _dispatch
meth(msg)
File "/usr/lib/python3.4/email/generator.py", line 269, in _handle_multipart
g.flatten(part, unixfrom=False, linesep=self._NL)
File "/usr/lib/python3.4/email/generator.py", line 112, in flatten
self._write(msg)
File "/usr/lib/python3.4/email/generator.py", line 178, in _write
self._dispatch(msg)
File "/usr/lib/python3.4/email/generator.py", line 211, in _dispatch
meth(msg)
File "/usr/lib/python3.4/email/generator.py", line 355, in _handle_message
g.flatten(msg.get_payload(0), unixfrom=False, linesep=self._NL)
File "/usr/lib/python3.4/email/generator.py", line 112, in flatten
self._write(msg)
File "/usr/lib/python3.4/email/generator.py", line 186, in _write
msg.replace_header('content-transfer-encoding', munge_cte[0])
File "/usr/lib/python3.4/email/message.py", line 559, in replace_header
raise KeyError(_name)
KeyError: 'content-transfer-encoding'
Jun 14 02:56:13 2016 (26480) SHUNTING: 1465872973.3492272+fd72df4a9c11c38c3964605185fdc99c5cc3acea
Attempts to view the shunted message throw a similar error
$ ../bin/mailman qfile queue/shunt/1465872973.3492272+fd72df4a9c11c38c3964605185fdc99c5cc3acea.pck
[----- start pickle -----]
<----- start object 1 ----->
Traceback (most recent call last):
File "/opt/mailman/mailman-bundler/venv-3.4/bin/mailman", line 9, in <module>
load_entry_point('mailman==3.1.0', 'console_scripts', 'mailman')()
File "/usr/local/lib/python3.4/dist-packages/mailman-3.1.0-py3.4.egg/mailman/bin/mailman.py", line 100, in main
args.func(args)
File "/usr/local/lib/python3.4/dist-packages/mailman-3.1.0-py3.4.egg/mailman/commands/cli_qfile.py", line 81, in process
printer.pprint(obj)
File "/usr/lib/python3.4/pprint.py", line 139, in pprint
self._format(object, self._stream, 0, 0, {}, 0)
File "/usr/lib/python3.4/pprint.py", line 162, in _format
rep = self._repr(object, context, level - 1)
File "/usr/lib/python3.4/pprint.py", line 301, in _repr
self._depth, level)
File "/usr/lib/python3.4/pprint.py", line 313, in format
return _safe_repr(object, context, maxlevels, level)
File "/usr/lib/python3.4/pprint.py", line 399, in _safe_repr
rep = repr(object)
File "/usr/local/lib/python3.4/dist-packages/mailman-3.1.0-py3.4.egg/mailman/email/message.py", line 43, in __repr__
return self.__str__()
File "/usr/lib/python3.4/email/message.py", line 136, in __str__
return self.as_string()
File "/usr/lib/python3.4/email/message.py", line 159, in as_string
g.flatten(self, unixfrom=unixfrom)
File "/usr/lib/python3.4/email/generator.py", line 112, in flatten
self._write(msg)
File "/usr/lib/python3.4/email/generator.py", line 178, in _write
self._dispatch(msg)
File "/usr/lib/python3.4/email/generator.py", line 211, in _dispatch
meth(msg)
File "/usr/lib/python3.4/email/generator.py", line 269, in _handle_multipart
g.flatten(part, unixfrom=False, linesep=self._NL)
File "/usr/lib/python3.4/email/generator.py", line 112, in flatten
self._write(msg)
File "/usr/lib/python3.4/email/generator.py", line 178, in _write
self._dispatch(msg)
File "/usr/lib/python3.4/email/generator.py", line 211, in _dispatch
meth(msg)
File "/usr/lib/python3.4/email/generator.py", line 355, in _handle_message
g.flatten(msg.get_payload(0), unixfrom=False, linesep=self._NL)
File "/usr/lib/python3.4/email/generator.py", line 112, in flatten
self._write(msg)
File "/usr/lib/python3.4/email/generator.py", line 186, in _write
msg.replace_header('content-transfer-encoding', munge_cte[0])
File "/usr/lib/python3.4/email/message.py", line 559, in replace_header
raise KeyError(_name)
KeyError: 'content-transfer-encoding'
The above is really OK as far as it goes. The real problem is attempts to view the held message in postorius give a 500 error with the following:
Jun 14 03:00:35 2016 (26481) 127.0.0.1 - - "GET /3.0/lists/mailman-users@mailman3.org/held?count=1&page=1 HTTP/1.1" 200 4750
Jun 14 03:00:35 2016 (26481) REST request handler error:
Traceback (most recent call last):
File "/usr/lib/python3.4/wsgiref/handlers.py", line 137, in run
self.result = application(self.environ, self.start_response)
File "/usr/local/lib/python3.4/dist-packages/mailman-3.1.0-py3.4.egg/mailman/database/transaction.py", line 50, in wrapper
rtn = function(*args, **kws)
File "/usr/local/lib/python3.4/dist-packages/mailman-3.1.0-py3.4.egg/mailman/rest/wsgiapp.py", line 208, in __call__
return super().__call__(environ, start_response)
File "/usr/local/lib/python3.4/dist-packages/falcon-1.0.0rc1-py3.4.egg/falcon/api.py", line 184, in __call__
responder(req, resp, **params)
File "/usr/local/lib/python3.4/dist-packages/mailman-3.1.0-py3.4.egg/mailman/rest/post_moderation.py", line 151, in on_get
resource = self._make_collection(request)
File "/usr/local/lib/python3.4/dist-packages/mailman-3.1.0-py3.4.egg/mailman/rest/helpers.py", line 141, in _make_collection
for resource in collection]
File "/usr/local/lib/python3.4/dist-packages/mailman-3.1.0-py3.4.egg/mailman/rest/helpers.py", line 141, in <listcomp>
for resource in collection]
File "/usr/local/lib/python3.4/dist-packages/mailman-3.1.0-py3.4.egg/mailman/rest/post_moderation.py", line 141, in _resource_as_dict
resource = self._make_resource(request.id)
File "/usr/local/lib/python3.4/dist-packages/mailman-3.1.0-py3.4.egg/mailman/rest/post_moderation.py", line 74, in _make_resource
resource['msg'] = msg.as_string()
File "/usr/lib/python3.4/email/message.py", line 159, in as_string
g.flatten(self, unixfrom=unixfrom)
File "/usr/lib/python3.4/email/generator.py", line 112, in flatten
self._write(msg)
File "/usr/lib/python3.4/email/generator.py", line 186, in _write
msg.replace_header('content-transfer-encoding', munge_cte[0])
File "/usr/lib/python3.4/email/message.py", line 559, in replace_header
raise KeyError(_name)
KeyError: 'content-transfer-encoding'
and Postorius sees
ERROR 2016-06-14 03:00:35,056 base 26520 139720996378432 Internal Server Error: /mailman3/lists/mailman-users.mailman3.org/held_messages
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/Django-1.9.4-py2.7.egg/django/core/handlers/base.py", line 149, in get_response
response = self.process_exception_by_middleware(e, request)
File "/usr/local/lib/python2.7/dist-packages/Django-1.9.4-py2.7.egg/django/core/handlers/base.py", line 147, in get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/usr/local/lib/python2.7/dist-packages/Django-1.9.4-py2.7.egg/django/contrib/auth/decorators.py", line 23, in _wrapped_view
return view_func(request, *args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/postorius-1.0.4-py2.7.egg/postorius/auth/decorators.py", line 80, in wrapper
return fn(*args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/postorius-1.0.4-py2.7.egg/postorius/views/list.py", line 421, in list_moderation
paginator_class=utils.MailmanPaginator)
File "/usr/local/lib/python2.7/dist-packages/postorius-1.0.4-py2.7.egg/postorius/utils.py", line 89, in paginate
results = paginator.page(1)
File "/usr/local/lib/python2.7/dist-packages/postorius-1.0.4-py2.7.egg/postorius/utils.py", line 63, in page
result = self.function(count=self.per_page, page=number)
File "/usr/local/lib/python2.7/dist-packages/mailmanclient-1.0.1-py2.7.egg/mailmanclient/_client.py", line 677, in get_held_page
return Page(self._connection, url, HeldMessage, count, page)
File "/usr/local/lib/python2.7/dist-packages/mailmanclient-1.0.1-py2.7.egg/mailmanclient/_client.py", line 329, in __init__
self._create_page()
File "/usr/local/lib/python2.7/dist-packages/mailmanclient-1.0.1-py2.7.egg/mailmanclient/_client.py", line 354, in _create_page
response, content = self._connection.call(self._build_url())
File "/usr/local/lib/python2.7/dist-packages/mailmanclient-1.0.1-py2.7.egg/mailmanclient/_client.py", line 111, in call
raise HTTPError(url, response.status, content, response, None)
HTTPError: HTTP Error 500: A server error occurred. Please contact the administrator.
This makes it impossible to view/discard the message in Postorius.
It seems this failure should somehow be more graceful.