diff options
author | Yasuhito FUTATSUKI at POEM <futatuki@poem.co.jp> | 2020-01-13 09:13:27 +0900 |
---|---|---|
committer | Yasuhito FUTATSUKI at POEM <futatuki@poem.co.jp> | 2020-01-13 09:13:27 +0900 |
commit | 94c85073d1ec6ab111efd2dc6d036d00995cabaa (patch) | |
tree | 3004c08c04d1204707deef485a1cf5000efaffd5 /Mailman/MailList.py | |
parent | bfb97f9086b505020158225cfab9964bb4b88f35 (diff) | |
parent | 6dc4f98f42535c22a3805370c5d45706f40db37d (diff) | |
download | mailman2-94c85073d1ec6ab111efd2dc6d036d00995cabaa.tar.gz mailman2-94c85073d1ec6ab111efd2dc6d036d00995cabaa.tar.xz mailman2-94c85073d1ec6ab111efd2dc6d036d00995cabaa.zip |
merge lp:mailman/2.1 up to 1832 (2.1.30rc1)
Diffstat (limited to 'Mailman/MailList.py')
-rw-r--r-- | Mailman/MailList.py | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/Mailman/MailList.py b/Mailman/MailList.py index 12d75aff..9e6bbcb6 100644 --- a/Mailman/MailList.py +++ b/Mailman/MailList.py @@ -833,6 +833,25 @@ class MailList(HTMLFormatter, Deliverer, ListAdmin, # # Membership management front-ends and assertion checks # + def CheckPending(self, email): + """Check if there is already an unexpired pending subscription for + this email. + """ + if not mm_cfg.REFUSE_SECOND_PENDING: + return False + pends = self._Pending__load() + # Save and reload the db to evict expired pendings. + self._Pending__save(pends) + pends = self._Pending__load() + for k, v in pends.items(): + if k in ('evictions', 'version'): + continue + op, data = v + if (op == Pending.SUBSCRIPTION and + data.address.lower() == email.lower()): + return True + return False + def InviteNewMember(self, userdesc, text=''): """Invite a new member to the list. @@ -919,6 +938,8 @@ class MailList(HTMLFormatter, Deliverer, ListAdmin, Utils.ValidateEmail(email) if self.isMember(email): raise Errors.MMAlreadyAMember, email + if self.CheckPending(email): + raise Errors.MMAlreadyPending, email if email.lower() == self.GetListEmail().lower(): # Trying to subscribe the list to itself! raise Errors.MMBadEmailError |