aboutsummaryrefslogtreecommitdiffstats
path: root/cron/mailpasswds
diff options
context:
space:
mode:
Diffstat (limited to 'cron/mailpasswds')
-rwxr-xr-xcron/mailpasswds22
1 files changed, 21 insertions, 1 deletions
diff --git a/cron/mailpasswds b/cron/mailpasswds
index 348ca336..86f49d18 100755
--- a/cron/mailpasswds
+++ b/cron/mailpasswds
@@ -42,6 +42,7 @@ import sys
import os
import errno
import getopt
+from types import UnicodeType
import paths
# mm_cfg must be imported before the other modules, due to the side-effect of
@@ -78,6 +79,13 @@ def usage(code, msg=''):
+def tounicode(s, enc):
+ if isinstance(s, UnicodeType):
+ return s
+ return unicode(s, enc, 'replace')
+
+
+
def main():
try:
opts, args = getopt.getopt(sys.argv[1:], 'l:h',
@@ -142,7 +150,15 @@ def main():
continue
# Group by the lower-cased address, since Mailman always
# treates person@dom.ain the same as PERSON@dom.ain.
- password = mlist.getMemberPassword(member)
+ try:
+ password = mlist.getMemberPassword(member)
+ except Errors.NotAMemberError:
+ # Here's a member with no passwords, which I think was
+ # possible in older versions of Mailman. Log this and
+ # move on.
+ syslog('error', 'password-less member %s for list %s',
+ member, mlist.internal_name())
+ continue
optionsurl = mlist.GetOptionsURL(member)
lang = mlist.getMemberLanguage(member)
info = (listaddr, password, optionsurl, lang)
@@ -176,6 +192,7 @@ def main():
if cnt > langcnt:
poplang = lang
langcnt = cnt
+ enc = Utils.GetCharSet(poplang)
# Craft the table header
header = '%-40s %-10s\n%-40s %-10s' % (
_('List'), _('Password // URL'), '----', '--------')
@@ -190,6 +207,9 @@ def main():
'exreq' : sitereq,
'owner' : siteowner,
}, lang=poplang)
+ # Coerce everything to Unicode
+ text = tounicode(text, enc)
+ table = [tounicode(_t, enc) for _t in table]
# Add the table to the end so it doesn't get wrapped/filled
text += (header + '\n' + NL.join(table))
# Translate the message and headers to user's suggested lang