1 |
=== modified file 'Mailman/MailList.py' |
2 |
--- Mailman/MailList.py 2007-11-26 01:32:26 +0000 |
3 |
+++ Mailman/MailList.py 2008-02-23 23:14:01 +0000 |
4 |
@@ -1062,9 +1062,10 @@ |
5 |
newaddr = Utils.LCDomain(newaddr) |
6 |
Utils.ValidateEmail(newaddr) |
7 |
# Raise an exception if this email address is already a member of the |
8 |
- # list, but only if the new address is the same case-wise as the old |
9 |
- # address and we're not doing a global change. |
10 |
- if not globally and newaddr == oldaddr and self.isMember(newaddr): |
11 |
+ # list, but only if the new address is the same case-wise as the |
12 |
+ # existing member address and we're not doing a global change. |
13 |
+ if not globally and (self.isMember(newaddr) and |
14 |
+ newaddr == self.getMemberCPAddress(newaddr)): |
15 |
raise Errors.MMAlreadyAMember |
16 |
if newaddr == self.GetListEmail().lower(): |
17 |
raise Errors.MMBadEmailError |
18 |
@@ -1120,9 +1121,16 @@ |
19 |
raise Errors.MembershipIsBanned, pattern |
20 |
# It's possible they were a member of this list, but choose to change |
21 |
# their membership globally. In that case, we simply remove the old |
22 |
- # address. |
23 |
- if self.getMemberCPAddress(oldaddr) == newaddr: |
24 |
- self.removeMember(oldaddr) |
25 |
+ # address. This gets tricky with case changes. We can't just remove |
26 |
+ # the old address if it differs from the new only by case, because |
27 |
+ # that removes the new, so the condition is if the new address is the |
28 |
+ # CP address of a member, then if the old address yields a different |
29 |
+ # CP address, we can simply remove the old address, otherwise we can |
30 |
+ # do nothing. |
31 |
+ if self.isMember(newaddr) and (self.getMemberCPAddress(newaddr) == |
32 |
+ newaddr): |
33 |
+ if self.getMemberCPAddress(oldaddr) <> newaddr: |
34 |
+ self.removeMember(oldaddr) |
35 |
else: |
36 |
self.changeMemberAddress(oldaddr, newaddr) |
37 |
# If globally is true, then we also include every list for which |
38 |
@@ -1144,8 +1152,10 @@ |
39 |
mlist.Lock() |
40 |
try: |
41 |
# Same logic as above, re newaddr is already a member |
42 |
- if mlist.getMemberCPAddress(oldaddr) == newaddr: |
43 |
- mlist.removeMember(oldaddr) |
44 |
+ if mlist.isMember(newaddr) and ( |
45 |
+ mlist.getMemberCPAddress(newaddr) == newaddr): |
46 |
+ if mlist.getMemberCPAddress(oldaddr) <> newaddr: |
47 |
+ mlist.removeMember(oldaddr) |
48 |
else: |
49 |
mlist.changeMemberAddress(oldaddr, newaddr) |
50 |
mlist.Save() |
51 |
|
52 |
|
53 |
|