diff options
| -rw-r--r-- | Mailman/Cgi/admin.py | 6 | ||||
| -rw-r--r-- | Mailman/Defaults.py.in | 2 | ||||
| -rw-r--r-- | Mailman/Digester.py | 2 | ||||
| -rw-r--r-- | Mailman/MailList.py | 59 | ||||
| -rw-r--r-- | Mailman/Utils.py | 7 | ||||
| -rw-r--r-- | Mailman/versions.py | 13 |
6 files changed, 69 insertions, 20 deletions
diff --git a/Mailman/Cgi/admin.py b/Mailman/Cgi/admin.py index bc2b0989d..0fe888b4d 100644 --- a/Mailman/Cgi/admin.py +++ b/Mailman/Cgi/admin.py @@ -518,7 +518,7 @@ def FormatMembershipOptions(lst): cells = [member + "<input type=hidden name=user value=%s>" % (member), "subscribed " + CheckBox(member + "_subscribed", "on", 1).Format()] - if lst.members.get(member): + if lst.members.has_key(member): cells.append("digest " + CheckBox(member + "_digest", "off", 0).Format()) else: @@ -790,11 +790,11 @@ def ChangeOptions(lst, category, cgi_info, document): del lst.digest_members[user] dirty = 1 if not lst.members.has_key(user): - lst.members[user] = 1 + lst.members[user] = 0 dirty = 1 else: if not lst.digest_members.has_key(user): - lst.digest_members[user] = 1 + lst.digest_members[user] = 0 dirty = 1 if lst.members.has_key(user): del lst.members[user] diff --git a/Mailman/Defaults.py.in b/Mailman/Defaults.py.in index db3d2c8d3..4a63f63ae 100644 --- a/Mailman/Defaults.py.in +++ b/Mailman/Defaults.py.in @@ -274,4 +274,4 @@ PRIVATE_ARCHIVE_FILE_DIR = os.path.join(PREFIX, 'archives/private') VERSION = '@VERSION@' # Data file version number -DATA_FILE_VERSION = 12 +DATA_FILE_VERSION = 13 diff --git a/Mailman/Digester.py b/Mailman/Digester.py index a794bd865..3455ba3e1 100644 --- a/Mailman/Digester.py +++ b/Mailman/Digester.py @@ -228,7 +228,7 @@ class Digester: def HatesMime(x, s=self, v=mm_cfg.DisableMime): return s.GetUserOption(x, v) - digestmembers = self.GetDigestMembers() + digestmembers = self.GetDigestDeliveryMembers() recipients = filter(DeliveryEnabled, digestmembers) mime_recipients = filter(LikesMime, recipients) text_recipients = filter(HatesMime, recipients) 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)) diff --git a/Mailman/Utils.py b/Mailman/Utils.py index 2e8b9d602..a322c403d 100644 --- a/Mailman/Utils.py +++ b/Mailman/Utils.py @@ -231,7 +231,6 @@ def ValidEmail(str): return 1 - def GetPathPieces(path): l = string.split(path, '/') try: @@ -328,7 +327,7 @@ def GetPossibleMatchingAddrs(name): given scott@blackbox.pobox.com return ['scott@blackbox.pobox.com', 'scott@pobox.com']""" - name = LCDomain(name) + name = string.lower(name) user, domain = ParseEmail(name) res = [name] if domain: @@ -357,11 +356,11 @@ def FindMatchingAddresses(name, dict, *dicts): dicts.insert(0, dict) if not mm_cfg.SMART_ADDRESS_MATCH: for d in dicts: - if d.has_key(LCDomain(name)): + if d.has_key(string.lower(name)): return [name] return [] # - # GetPossibleMatchingAddrs return LCDomain'd values + # GetPossibleMatchingAddrs return string.lower'd values # p_matches = GetPossibleMatchingAddrs(name) res = [] diff --git a/Mailman/versions.py b/Mailman/versions.py index b145187ef..5327b09a5 100644 --- a/Mailman/versions.py +++ b/Mailman/versions.py @@ -35,6 +35,7 @@ detected.""" import re, string, types import mm_cfg +import Utils def Update(l, stored_state): "Dispose of old vars and user options, mapping to new ones when suitable." @@ -121,6 +122,18 @@ def UpdateOldVars(l, stored_state): if not hasattr(l, "admin_notify_mchanges"): setatrr(l, "admin_notify_mchanges", mm_cfg.DEFAULT_ADMIN_NOTIFY_MCHANGES) + for k in l.members.keys(): + if string.lower(k) != k: + l.members[string.lower(k)] = Utils.LCDomain(k) + del l.members[k] + else: + l.members[k] = 0 + for k in l.digest_members.keys(): + if string.lower(k) != k: + l.digest_members[string.lower(k)] = Utils.LCDomain(k) + del l.digest_members[k] + else: + l.digest_members[k] = 0 def UpdateOldUsers(l): |
