summaryrefslogtreecommitdiff
path: root/Mailman/Deliverer.py
diff options
context:
space:
mode:
Diffstat (limited to 'Mailman/Deliverer.py')
-rw-r--r--Mailman/Deliverer.py60
1 files changed, 32 insertions, 28 deletions
diff --git a/Mailman/Deliverer.py b/Mailman/Deliverer.py
index 7466c8130..24571bd05 100644
--- a/Mailman/Deliverer.py
+++ b/Mailman/Deliverer.py
@@ -24,6 +24,7 @@ from Mailman import Errors
from Mailman import Utils
from Mailman import Message
from Mailman.i18n import _
+from Mailman.Logging.Syslog import syslog
@@ -78,36 +79,39 @@ your membership administrative address, %(addr)s.'''))
def MailUserPassword(self, user):
listfullname = '%s@%s' % (self.real_name, self.host_name)
- ok = 1
requestaddr = self.GetRequestEmail()
# find the lowercased version of the user's address
- if self.isMember(user) and self.getMemberPassword(user):
- cpuser = self.getMemberCPAddress(user)
- recipient = self.GetMemberAdminEmail(cpuser)
- subject = _('%(listfullname)s mailing list reminder')
- adminaddr = self.GetAdminEmail()
- # get the text from the template
- text = Utils.maketext(
- 'userpass.txt',
- {'user' : cpuser,
- 'listname' : self.real_name,
- 'fqdn_lname' : self.GetListEmail(),
- 'password' : self.passwords[user],
- 'options_url': self.GetOptionsURL(user, absolute=1),
- 'requestaddr': requestaddr,
- 'owneraddr' : self.GetOwnerEmail(),
- }, lang=self.getMemberLanguage(user), mlist=self)
- else:
- ok = 0
- recipient = self.GetAdminEmail()
- subject = _('%(listfullname)s user %(user)s missing password!')
- text = Utils.maketext(
- 'nopass.txt',
- {'username' : `user`,
- 'internal_name': self.internal_name(),
- }, lang=self.getMemberLanguage(user), mlist=self)
+ adminaddr = self.GetAdminEmail()
+ assert self.isMember(user)
+ if not self.getMemberPassword(user):
+ # The user's password somehow got corrupted. Generate a new one
+ # for him, after logging this bogosity.
+ syslog('error', 'User %s had a false password for list %s',
+ user, self.internal_name())
+ waslocked = self.Locked()
+ if not waslocked:
+ self.Lock()
+ try:
+ self.setMemberPassword(user, Utils.MakeRandomPassword())
+ self.Save()
+ finally:
+ if not waslocked:
+ self.Unlock()
+ # Now send the user his password
+ cpuser = self.getMemberCPAddress(user)
+ recipient = self.GetMemberAdminEmail(cpuser)
+ subject = _('%(listfullname)s mailing list reminder')
+ # get the text from the template
+ text = Utils.maketext(
+ 'userpass.txt',
+ {'user' : cpuser,
+ 'listname' : self.real_name,
+ 'fqdn_lname' : self.GetListEmail(),
+ 'password' : self.passwords[user],
+ 'options_url': self.GetOptionsURL(user, absolute=1),
+ 'requestaddr': requestaddr,
+ 'owneraddr' : self.GetOwnerEmail(),
+ }, lang=self.getMemberLanguage(user), mlist=self)
msg = Message.UserNotification(recipient, adminaddr, subject, text)
msg['X-No-Archive'] = 'yes'
msg.send(self)
- if not ok:
- raise Errors.MMBadUserError