diff options
| author | cotton | 1998-11-21 20:06:47 +0000 |
|---|---|---|
| committer | cotton | 1998-11-21 20:06:47 +0000 |
| commit | c39c4f7270a57bcaddbd1b22d8dac2863f0d0af2 (patch) | |
| tree | afdf47f6c9c0db900eaa8f3207dfd4a0aeea18a5 /Mailman/MailList.py | |
| parent | c56a6d08e21e818f45343328d86dcf66188acd12 (diff) | |
| download | mailman-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.py | 59 |
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)) |
