[Mailman-Developers] Re: True Virtual Hosting With Mailman Hack

Zoran Dzelajlija jelly+mailman-dev at mail.iskon.hr
Mon May 3 20:15:12 EDT 2004

The Anarcat <anarcat at anarcat.ath.cx> wrote:
> [sourceforge seems to be down, so I post this here]

> Hi there,

> We developped a reliable solution for running lists with the same name
> on different domains on the same Mailman installation.

> I implemented that on top of the Mailman 2.1.1-5.1 Debian stable
> package.  All that is needed is to patch 2 files (bin/newlist,
> Mailman/MailList.py) in the mailman install, and here is the patch:

> http://bugs.koumbit.net/file_download.php?file_id=3&type=bug

> There's only one caveat right now: Mailman/Cgi/create.py might need to
> get patched too, but I haven't got around looking at it yet, and it
> "just works", for now.

I've implemented a patch like this some time ago, and it has somewhat grown
during time due to various bugs we found out.  I didn't check your patch,
since I'm writing this offline, but here are some gotchas that weren't so
obvious for us:

_setValue in Mailman/Gui/General.py has to be patched, or your list
admins won't be able to make real_name case changes.  This bug can also be
found in (some?) cPanel versions.

There's also some usage of internal_name in HasExplicitDest() in
MailList.py, which would make Mailman hold messages errorneously
under certain circumstances:

diff -Nru mailman-2.1.4/Mailman/MailList.py mailman-2.1.4.patched/Mailman/MailList.py
--- mailman-2.1.4/Mailman/MailList.py	2003-12-01 01:54:16.000000000 +0100
+++ mailman-2.1.4.patched/Mailman/MailList.py	2004-01-09 15:22:16.463664000 +0100
@@ -1243,7 +1243,7 @@
         to or cc addrs."""
         # BAW: fall back to Utils.ParseAddr if the first test fails.
         # this is the list's full address
-        listfullname = '%s@%s' % (self.internal_name(), self.host_name)
+        listfullname = self.getListAddress()
         recips = []
         # check all recipient addresses against the list's explicit addresses,
         # specifically To: Cc: and Resent-to:
@@ -1259,7 +1259,7 @@
             addr = addr.lower()
             localpart = addr.split('@')[0]
             if (# TBD: backwards compatibility: deprecated
-                    localpart == self.internal_name() or
+                    localpart == self.real_name.lower() or
                     # exact match against the complete list address
                     addr == listfullname):
                 return 1

> All it does is to add the domain to the internal_name() of a list. The
> real_name is kept as is, and the getListAddress() does the Right Thing.

Hope you did not forget to use .lower() on self.real_name in
getListAddress(), like we did.  ;-)  There, so you now know all the
mistakes we made (and found out about).


More information about the Mailman-Developers mailing list