summaryrefslogtreecommitdiff
path: root/Mailman/MailList.py
diff options
context:
space:
mode:
authorcotton1998-11-21 20:06:47 +0000
committercotton1998-11-21 20:06:47 +0000
commitc39c4f7270a57bcaddbd1b22d8dac2863f0d0af2 (patch)
treeafdf47f6c9c0db900eaa8f3207dfd4a0aeea18a5 /Mailman/MailList.py
parentc56a6d08e21e818f45343328d86dcf66188acd12 (diff)
downloadmailman-c39c4f7270a57bcaddbd1b22d8dac2863f0d0af2.tar.gz
mailman-c39c4f7270a57bcaddbd1b22d8dac2863f0d0af2.tar.zst
mailman-c39c4f7270a57bcaddbd1b22d8dac2863f0d0af2.zip
These changes represent the changes that make mailman's addressing
work like unix mail: username portions of addresses are case-preserved for delivery only. All other address comparisons are lowercase. up'd data version in Defaults to 13 ** MailList.py: added an __AddMember method that takes an address and whether or not it is a digest address as args and populates the member dictionary like this: if string.lower(addr) == LCDomain(addr): member_dict[addr] = 0 else: member_dictp[string.lower(addr)] == LCDomain(addr) added .GetDeliveryMembers() and .GetDigestDeliveryMembers() methods for use by posting and digest delivery mechanisms. changed a nested def portion in Post to use an explicit loop. **Digester.py: uses .GetDigestDeliveryMembers instead of .GetDigestMembers(). **Utils.py: address comparisons are lc. **versions.py: populate the member dicts according to the above formula. **Cgi/admin.py: fixed a bug introduced from the first change to using member dictionaries: all members were showing up as digest members on the admin membership page. changed a dict.get to dict.has_key to fix this. NOTE: this code is tested only insofar as I posted and poked around on the cgi's a bit, and let lists do the versions code. These changes should be tested more, but I *have* to go now and wanted to check them in before someone made it difficult to do so by changing stuff tomarrow, cause i'm gone all day tomarrow. scott
Diffstat (limited to 'Mailman/MailList.py')
-rw-r--r--Mailman/MailList.py59
1 files changed, 48 insertions, 11 deletions
diff --git a/Mailman/MailList.py b/Mailman/MailList.py
index 7917e8356..9b526b18a 100644
--- a/Mailman/MailList.py
+++ b/Mailman/MailList.py
@@ -68,13 +68,50 @@ class MailList(MailCommandHandler, HTMLFormatter, Deliverer, ListAdmin,
pass
def GetMembers(self):
- """returns a list of the members."""
+ """returns a list of the members. (all lowercase)"""
return self.members.keys()
-
+
def GetDigestMembers(self):
- """returns a list of digest members."""
+ """returns a list of digest members. (all lowercase)"""
return self.digest_members.keys()
+ def GetDeliveryMembers(self):
+ """returns a list of the members with username case preserved."""
+ res = []
+ for k,v in self.members.items():
+ if type(v) is type(""):
+ res.append(v)
+ else:
+ res.append(k)
+ return res
+
+ def GetDigestDeliveryMembers(self):
+ """returns a list of the members with username case preserved."""
+ res = []
+ for k,v in self.digest_members.items():
+ if type(v) is type(""):
+ res.append(v)
+ else:
+ res.append(k)
+ return res
+
+ def __AddMember(self, addr, digest):
+ """adds the appropriate data to the internal members dict.
+
+ If the username has upercase letters in it, then the value
+ in the members dict is the case preserved address, otherwise,
+ the value is 0."""
+ if Utils.LCDomain(addr) == string.lower(addr):
+ if digest:
+ self.digest_members[addr] = 0
+ else:
+ self.members[addr] = 0
+ else:
+ if digest:
+ self.digest_members[string.lower(addr)] = addr
+ else:
+ self.members[string.lower(addr)] = addr
+
def GetAdminEmail(self):
return '%s-admin@%s' % (self._internal_name, self.host_name)
@@ -793,11 +830,10 @@ class MailList(MailCommandHandler, HTMLFormatter, Deliverer, ListAdmin,
name = Utils.LCDomain(name)
if self.IsMember(name):
raise Errors.MMAlreadyAMember
+ self.__AddMember(name, digest)
if digest:
- self.digest_members[name] = 1
kind = " (D)"
else:
- self.members[name] = 1
kind = ""
self.SetUserOption(name, mm_cfg.DisableMime,
1 - self.mime_is_default_digest)
@@ -1089,10 +1125,10 @@ class MailList(MailCommandHandler, HTMLFormatter, Deliverer, ListAdmin,
if self.GetUserOption(sender, mm_cfg.AcknowlegePosts):
ack_post = 1
# Deliver the mail.
- recipients = self.GetMembers()
+ members = self.GetDeliveryMembers()
if dont_send_to_sender:
try:
- recipients.remove(sender)
+ recipients.remove(members)
#
# sender not in list (case sensitive username problem?)
#
@@ -1100,10 +1136,11 @@ class MailList(MailCommandHandler, HTMLFormatter, Deliverer, ListAdmin,
self.LogMsg("error",
"couldn't remove %s from recipient list: %s",
sender,
- str(recipients))
- def DeliveryEnabled(x, s=self, v=mm_cfg.DisableDelivery):
- return not s.GetUserOption(x, v)
- recipients = filter(DeliveryEnabled, recipients)
+ str(members))
+ recipients = []
+ for m in members:
+ if not self.GetUserOption(m, mm_cfg.DisableDelivery):
+ recipients.append(m)
self.LogMsg("post", "post to %s from %s size=%d",
self._internal_name, msg.GetSender(), len(msg.body))