summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcotton1998-11-21 20:06:47 +0000
committercotton1998-11-21 20:06:47 +0000
commitc39c4f7270a57bcaddbd1b22d8dac2863f0d0af2 (patch)
treeafdf47f6c9c0db900eaa8f3207dfd4a0aeea18a5
parentc56a6d08e21e818f45343328d86dcf66188acd12 (diff)
downloadmailman-c39c4f7270a57bcaddbd1b22d8dac2863f0d0af2.tar.gz
mailman-c39c4f7270a57bcaddbd1b22d8dac2863f0d0af2.tar.zst
mailman-c39c4f7270a57bcaddbd1b22d8dac2863f0d0af2.zip
-rw-r--r--Mailman/Cgi/admin.py6
-rw-r--r--Mailman/Defaults.py.in2
-rw-r--r--Mailman/Digester.py2
-rw-r--r--Mailman/MailList.py59
-rw-r--r--Mailman/Utils.py7
-rw-r--r--Mailman/versions.py13
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):