Barry Warsaw pushed to branch master at mailman / Mailman Core
Commits:
8071d4a2 by Aurélien Bompard at 2017-11-09T23:04:44+01:00
Don't assume the list-id from the list fqdn
Fixes: #428
- - - - -
06764cdd by Barry Warsaw at 2017-11-10T15:25:46+00:00
Merge branch 'fix-renaming' into 'master'
Don't assume the list-id from the list fqdn
Closes #428
See merge request mailman/mailman!334
- - - - -
5 changed files:
- src/mailman/docs/NEWS.rst
- src/mailman/model/listmanager.py
- src/mailman/model/tests/test_listmanager.py
- src/mailman/runners/lmtp.py
- src/mailman/runners/tests/test_lmtp.py
Changes:
=====================================
src/mailman/docs/NEWS.rst
=====================================
--- a/src/mailman/docs/NEWS.rst
+++ b/src/mailman/docs/NEWS.rst
@@ -40,6 +40,7 @@ Bugs
subaddresses can now be posted to. (Closes #433)
* The ``admin`` subaddress, a synonym for ``bounces`` and deprecated since
Mailman 2.1, has been removed. (Closes #435)
+* Better support for changing the ``list_name`` property. (Closes #428)
Command line
------------
=====================================
src/mailman/model/listmanager.py
=====================================
--- a/src/mailman/model/listmanager.py
+++ b/src/mailman/model/listmanager.py
@@ -74,8 +74,8 @@ class ListManager:
def get_by_fqdn(self, store, fqdn_listname):
"""See `IListManager`."""
listname, at, hostname = fqdn_listname.partition('@')
- list_id = '{}.{}'.format(listname, hostname)
- return store.query(MailingList).filter_by(_list_id=list_id).first()
+ return store.query(MailingList).filter_by(
+ list_name=listname, mail_host=hostname).first()
@dbconnection
def delete(self, store, mlist):
=====================================
src/mailman/model/tests/test_listmanager.py
=====================================
--- a/src/mailman/model/tests/test_listmanager.py
+++ b/src/mailman/model/tests/test_listmanager.py
@@ -153,6 +153,15 @@ class TestListManager(unittest.TestCase):
self.assertEqual(list_manager.get_by_fqdn('[email protected]'), ant)
self.assertIsNone(list_manager.get_by_fqdn('ant.example.com'))
+ def test_find_by_fqdn_renamed(self):
+ ant = create_list('[email protected]')
+ ant.list_name = 'renamed'
+ self.assertEqual(ant.posting_address, '[email protected]')
+ self.assertEqual(ant.list_id, 'ant.example.com')
+ list_manager = getUtility(IListManager)
+ self.assertEqual(list_manager.get_by_fqdn('[email protected]'), ant)
+ self.assertIsNone(list_manager.get_by_fqdn('[email protected]'))
+
class TestListLifecycleEvents(unittest.TestCase):
layer = ConfigLayer
=====================================
src/mailman/runners/lmtp.py
=====================================
--- a/src/mailman/runners/lmtp.py
+++ b/src/mailman/runners/lmtp.py
@@ -165,12 +165,12 @@ class LMTPHandler:
if listname not in listnames:
status.append(ERR_550)
continue
- listid = '{}.{}'.format(local, domain)
+ mlist = getUtility(IListManager).get_by_fqdn(listname)
# The recipient is a valid mailing list. Find the subaddress
# if there is one, and set things up to enqueue to the proper
# queue.
queue = None
- msgdata = dict(listid=listid,
+ msgdata = dict(listid=mlist.list_id,
original_size=msg.original_size,
received_time=received_time)
canonical_subaddress = SUBADDRESS_NAMES.get(subaddress)
=====================================
src/mailman/runners/tests/test_lmtp.py
=====================================
--- a/src/mailman/runners/tests/test_lmtp.py
+++ b/src/mailman/runners/tests/test_lmtp.py
@@ -197,6 +197,24 @@ Subject: This will be recognized as a post to the -join
list.
get_queue_messages('in', expected_count=1)
get_queue_messages('command', expected_count=0)
+ def test_mailing_list_with_different_address_and_list_id(self):
+ # A mailing list can be renamed, in which case the list_name
+ # will be different but the list_id will remain the same.
+ # https://gitlab.com/mailman/mailman/issues/428
+ with transaction():
+ self._mlist.list_name = 'renamed'
+ self.assertEqual(self._mlist.posting_address, '[email protected]')
+ self._lmtp.sendmail('[email protected]', ['[email protected]'], """\
+From: [email protected]
+To: [email protected]
+Message-ID: <ant>
+Subject: This should be accepted.
+
+""")
+ # The message is in the incoming queue but not the command queue.
+ items = get_queue_messages('in', expected_count=1)
+ self.assertEqual(items[0].msgdata['listid'], 'test.example.com')
+
class TestBugs(unittest.TestCase):
"""Test some LMTP related bugs."""
View it on GitLab:
https://gitlab.com/mailman/mailman/compare/31f434d0866dbab5ebb4748fa9987eaac475eb0d...06764cdd23f11539ac47b21b6b066b1ca40ababb
---
View it on GitLab:
https://gitlab.com/mailman/mailman/compare/31f434d0866dbab5ebb4748fa9987eaac475eb0d...06764cdd23f11539ac47b21b6b066b1ca40ababb
You're receiving this email because of your account on gitlab.com.
_______________________________________________
Mailman-checkins mailing list
[email protected]
Unsubscribe:
https://mail.python.org/mailman/options/mailman-checkins/archive%40jab.org