diff options
| author | Barry Warsaw | 2011-04-25 22:57:35 -0400 |
|---|---|---|
| committer | Barry Warsaw | 2011-04-25 22:57:35 -0400 |
| commit | 0fbf60e83a0e9c908add1cef57af486f937147f0 (patch) | |
| tree | 3b4288d6c4b42d8e10a1966fb1760b69f0e91580 /src | |
| parent | 3f705f533191e4dd50a615c5692b00905b178e0a (diff) | |
| download | mailman-0fbf60e83a0e9c908add1cef57af486f937147f0.tar.gz mailman-0fbf60e83a0e9c908add1cef57af486f937147f0.tar.zst mailman-0fbf60e83a0e9c908add1cef57af486f937147f0.zip | |
Ensure that a member's address cannot be changed to an address they do not
control.
Diffstat (limited to 'src')
| -rw-r--r-- | src/mailman/model/member.py | 3 | ||||
| -rw-r--r-- | src/mailman/model/tests/test_member.py | 25 |
2 files changed, 28 insertions, 0 deletions
diff --git a/src/mailman/model/member.py b/src/mailman/model/member.py index 410f037dc..095e6fae7 100644 --- a/src/mailman/model/member.py +++ b/src/mailman/model/member.py @@ -114,6 +114,9 @@ class Member(Model): # A member cannot change their subscription address to an # unverified address. raise UnverifiedAddressError(new_address) + user = getUtility(IUserManager).get_user(new_address.email) + if user is None or user != self.user: + raise MembershipError('Address is not controlled by user') self._address = new_address @property diff --git a/src/mailman/model/tests/test_member.py b/src/mailman/model/tests/test_member.py index b99ff4911..7906d8983 100644 --- a/src/mailman/model/tests/test_member.py +++ b/src/mailman/model/tests/test_member.py @@ -71,6 +71,31 @@ class TestMember(unittest.TestCase): self.assertRaises(UnverifiedAddressError, setattr, member, 'address', new_address) + def test_cannot_change_to_address_uncontrolled_address(self): + # A user tries to change their subscription to an address they do not + # control. + anne = self._usermanager.create_user('anne@example.com') + address = list(anne.addresses)[0] + member = self._mlist.subscribe(address) + new_address = self._usermanager.create_address('nobody@example.com') + new_address.verified_on = now() + # The new address is not verified. + self.assertRaises(MembershipError, + setattr, member, 'address', new_address) + + def test_cannot_change_to_address_controlled_by_other_user(self): + # A user tries to change their subscription to an address some other + # user controls. + anne = self._usermanager.create_user('anne@example.com') + anne_address = list(anne.addresses)[0] + bart = self._usermanager.create_user('bart@example.com') + bart_address = list(bart.addresses)[0] + bart_address.verified_on = now() + member = self._mlist.subscribe(anne_address) + # The new address is not verified. + self.assertRaises(MembershipError, + setattr, member, 'address', bart_address) + def test_suite(): |
