[mailman] - fix #688435 - set proper permissions for private archive - fix badly rebased LC_CTYPE patch which

Jan Kaluža jkaluza at fedoraproject.org
Tue Apr 5 07:27:47 UTC 2011


commit 1ff0652a784cb58dcde38d09418f03c74d0754ee
Author: Jan Kaluza <hanzz.k at gmail.com>
Date:   Tue Apr 5 09:27:45 2011 +0200

    - fix #688435 - set proper permissions for private archive
    - fix badly rebased LC_CTYPE patch which caused newlist to fail with traceback

 mailman-2.1.9-LC_CTYPE.patch | 1088 +++++++++++++++++++++---------------------
 mailman.spec                 |   17 +-
 2 files changed, 557 insertions(+), 548 deletions(-)
---
diff --git a/mailman-2.1.9-LC_CTYPE.patch b/mailman-2.1.9-LC_CTYPE.patch
index 47099c8..074f7e0 100644
--- a/mailman-2.1.9-LC_CTYPE.patch
+++ b/mailman-2.1.9-LC_CTYPE.patch
@@ -1,8 +1,167 @@
-Nur in mailman-2.1.9-new: autom4te.cache.
-diff -ur mailman-2.1.9/bin/add_members mailman-2.1.9-new/bin/add_members
---- mailman-2.1.9/bin/add_members	2005-08-27 03:40:17.000000000 +0200
-+++ mailman-2.1.9-new/bin/add_members	2007-01-29 14:29:46.000000000 +0100
-@@ -81,6 +81,7 @@
+diff --git a/Mailman/MTA/Manual.py b/Mailman/MTA/Manual.py
+index 92e1c03..0abde2e 100644
+--- a/Mailman/MTA/Manual.py
++++ b/Mailman/MTA/Manual.py
+@@ -25,7 +25,7 @@ from Mailman import mm_cfg
+ from Mailman import Message
+ from Mailman import Utils
+ from Mailman.Queue.sbcache import get_switchboard
+-from Mailman.i18n import _
++from Mailman.i18n import _, C_
+ from Mailman.MTA.Utils import makealiases
+ 
+ try:
+@@ -74,12 +74,12 @@ Here are the entries for the /etc/aliases file:
+         outfp = sfp
+     else:
+         if not quiet:
+-            print _("""\
++            print C_("""\
+ To finish creating your mailing list, you must edit your /etc/aliases (or
+ equivalent) file by adding the following lines, and possibly running the
+ `newaliases' program:
+ """)
+-        print _("""\
++        print C_("""\
+ ## %(listname)s mailing list""")
+         outfp = sys.stdout
+     # Common path
+@@ -120,7 +120,7 @@ Here are the entries in the /etc/aliases file that should be removed:
+ """)
+         outfp = sfp
+     else:
+-        print _("""
++        print C_("""
+ To finish removing your mailing list, you must edit your /etc/aliases (or
+ equivalent) file by removing the following lines, and possibly running the
+ `newaliases' program:
+diff --git a/Mailman/MTA/Postfix.py b/Mailman/MTA/Postfix.py
+index 376f8b6..0a8395b 100644
+--- a/Mailman/MTA/Postfix.py
++++ b/Mailman/MTA/Postfix.py
+@@ -27,7 +27,7 @@ from stat import *
+ from Mailman import mm_cfg
+ from Mailman import Utils
+ from Mailman import LockFile
+-from Mailman.i18n import _
++from Mailman.i18n import C_
+ from Mailman.MTA.Utils import makealiases
+ from Mailman.Logging.Syslog import syslog
+ 
+@@ -314,7 +314,7 @@ def checkperms(state):
+     targetmode = S_IFREG | S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP
+     for file in ALIASFILE, VIRTFILE:
+         if state.VERBOSE:
+-            print _('checking permissions on %(file)s')
++            print C_('checking permissions on %(file)s')
+         stat = None
+         try:
+             stat = os.stat(file)
+@@ -324,9 +324,9 @@ def checkperms(state):
+         if stat and (stat[ST_MODE] & targetmode) <> targetmode:
+             state.ERRORS += 1
+             octmode = oct(stat[ST_MODE])
+-            print _('%(file)s permissions must be 066x (got %(octmode)s)'),
++            print C_('%(file)s permissions must be 066x (got %(octmode)s)'),
+             if state.FIX:
+-                print _('(fixing)')
++                print C_('(fixing)')
+                 os.chmod(file, stat[ST_MODE] | targetmode)
+             else:
+                 print
+@@ -342,7 +342,7 @@ def checkperms(state):
+                 raise
+             continue
+         if state.VERBOSE:
+-            print _('checking ownership of %(dbfile)s')
++            print C_('checking ownership of %(dbfile)s')
+         user = mm_cfg.MAILMAN_USER
+         ownerok = stat[ST_UID] == pwd.getpwnam(user)[2]
+         if not ownerok:
+@@ -350,10 +350,10 @@ def checkperms(state):
+                 owner = pwd.getpwuid(stat[ST_UID])[0]
+             except KeyError:
+                 owner = 'uid %d' % stat[ST_UID]
+-            print _('%(dbfile)s owned by %(owner)s (must be owned by %(user)s'),
++            print C_('%(dbfile)s owned by %(owner)s (must be owned by %(user)s'),
+             state.ERRORS += 1
+             if state.FIX:
+-                print _('(fixing)')
++                print C_('(fixing)')
+                 uid = pwd.getpwnam(user)[2]
+                 gid = grp.getgrnam(mm_cfg.MAILMAN_GROUP)[2]
+                 os.chown(dbfile, uid, gid)
+diff --git a/Mailman/i18n.py b/Mailman/i18n.py
+index 5f926b7..0cfdb99 100644
+--- a/Mailman/i18n.py
++++ b/Mailman/i18n.py
+@@ -15,6 +15,7 @@
+ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+ # USA.
+ 
++import locale
+ import sys
+ import time
+ import gettext
+@@ -25,6 +26,15 @@ from Mailman.SafeDict import SafeDict
+ 
+ _translation = None
+ 
++
++def _get_ctype_charset():
++    old = locale.setlocale(locale.LC_CTYPE, '')
++    charset = locale.nl_langinfo(locale.CODESET)
++    locale.setlocale(locale.LC_CTYPE, old)
++    return charset
++
++_ctype_charset = _get_ctype_charset()
++
+ 
+ 
+ def set_language(language=None):
+@@ -54,7 +64,7 @@ if _translation is None:
+ 
+ 
+ 
+-def _(s):
++def _(s, frame = 1):
+     if s == '':
+         return s
+     assert s
+@@ -70,7 +80,7 @@ def _(s):
+     # original string is 1) locals dictionary, 2) globals dictionary.
+     #
+     # First, get the frame of the caller
+-    frame = sys._getframe(1)
++    frame = sys._getframe(frame)
+     # A `safe' dictionary is used so we won't get an exception if there's a
+     # missing key in the dictionary.
+     dict = SafeDict(frame.f_globals.copy())
+@@ -95,6 +105,19 @@ def _(s):
+ 
+ 
+ 
++def tolocale(s):
++    global _ctype_charset
++    if isinstance(s, UnicodeType):
++        return s
++    source = _translation.charset ()
++    if not source:
++        return s
++    return unicode(s, source, 'replace').encode(_ctype_charset, 'replace')
++
++def C_(s):
++    return tolocale(_(s, 2))
++    
++
+ def ctime(date):
+     # Don't make these module globals since we have to do runtime translation
+     # of the strings anyway.
+diff --git a/bin/add_members b/bin/add_members
+index 03f0af3..562e15a 100755
+--- a/bin/add_members
++++ b/bin/add_members
+@@ -81,6 +81,7 @@ from Mailman import mm_cfg
  from Mailman import i18n
  
  _ = i18n._
@@ -10,7 +169,7 @@ diff -ur mailman-2.1.9/bin/add_members mailman-2.1.9-new/bin/add_members
  
  
  
-@@ -89,7 +90,7 @@
+@@ -89,7 +90,7 @@ def usage(status, msg=''):
          fd = sys.stderr
      else:
          fd = sys.stdout
@@ -19,7 +178,7 @@ diff -ur mailman-2.1.9/bin/add_members mailman-2.1.9-new/bin/add_members
      if msg:
          print >> fd, msg
      sys.exit(status)
-@@ -116,7 +117,7 @@
+@@ -116,7 +117,7 @@ class Tee:
          self.__outfp = outfp
  
      def write(self, msg):
@@ -28,7 +187,7 @@ diff -ur mailman-2.1.9/bin/add_members mailman-2.1.9-new/bin/add_members
          self.__outfp.write(msg)
  
  
-@@ -188,26 +189,26 @@
+@@ -191,26 +192,26 @@ def main():
              elif arg.lower()[0] == 'n':
                  send_welcome_msg = 0
              else:
@@ -60,7 +219,7 @@ diff -ur mailman-2.1.9/bin/add_members mailman-2.1.9-new/bin/add_members
  
      # Set up defaults
      if send_welcome_msg is None:
-@@ -227,7 +228,7 @@
+@@ -230,7 +231,7 @@ def main():
              nmembers = readfile(nfile)
  
          if not dmembers and not nmembers:
@@ -69,10 +228,11 @@ diff -ur mailman-2.1.9/bin/add_members mailman-2.1.9-new/bin/add_members
  
          s = StringIO()
          i18n.set_language(mlist.preferred_language)
-diff -ur mailman-2.1.9/bin/arch mailman-2.1.9-new/bin/arch
---- mailman-2.1.9/bin/arch	2005-08-27 03:40:17.000000000 +0200
-+++ mailman-2.1.9-new/bin/arch	2007-01-29 14:29:46.000000000 +0100
-@@ -70,7 +70,7 @@
+diff --git a/bin/arch b/bin/arch
+index a98ae2a..8fdca6a 100644
+--- a/bin/arch
++++ b/bin/arch
+@@ -70,7 +70,7 @@ from Mailman.Archiver.HyperArch import HyperArchive
  from Mailman.LockFile import LockFile
  from Mailman import i18n
  
@@ -81,7 +241,7 @@ diff -ur mailman-2.1.9/bin/arch mailman-2.1.9-new/bin/arch
  
  PROGRAM = sys.argv[0]
  i18n.set_language(mm_cfg.DEFAULT_SERVER_LANGUAGE)
-@@ -82,7 +82,7 @@
+@@ -82,7 +82,7 @@ def usage(code, msg=''):
          fd = sys.stderr
      else:
          fd = sys.stdout
@@ -90,7 +250,7 @@ diff -ur mailman-2.1.9/bin/arch mailman-2.1.9-new/bin/arch
      if msg:
          print >> fd, msg
      sys.exit(code)
-@@ -122,7 +122,7 @@
+@@ -122,7 +122,7 @@ def main():
  
      # grok arguments
      if len(args) < 1:
@@ -99,7 +259,7 @@ diff -ur mailman-2.1.9/bin/arch mailman-2.1.9-new/bin/arch
      listname = args[0].lower().strip()
  
      if len(args) < 2:
-@@ -140,7 +140,7 @@
+@@ -140,7 +140,7 @@ def main():
          try:
              mlist = MailList(listname)
          except Errors.MMListError, e:
@@ -108,20 +268,20 @@ diff -ur mailman-2.1.9/bin/arch mailman-2.1.9-new/bin/arch
          if mbox is None:
              mbox = mlist.ArchiveFileName()
  
-@@ -180,7 +180,7 @@
+@@ -165,7 +165,7 @@ def main():
          try:
              fp = open(mbox)
          except IOError, msg:
 -            usage(3, _('Cannot open mbox file %(mbox)s: %(msg)s'))
 +            usage(3, C_('Cannot open mbox file %(mbox)s: %(msg)s'))
- 
-         archiver = HyperArchive(mlist)
-         archiver.VERBOSE = verbose
-Nur in mailman-2.1.9-new/bin: arch.orig.
-diff -ur mailman-2.1.9/bin/b4b5-archfix mailman-2.1.9-new/bin/b4b5-archfix
---- mailman-2.1.9/bin/b4b5-archfix	2005-08-27 03:40:17.000000000 +0200
-+++ mailman-2.1.9-new/bin/b4b5-archfix	2007-01-29 14:29:46.000000000 +0100
-@@ -44,7 +44,7 @@
+         # Maybe wipe the old archives
+         if wipe:
+             if mlist.scrub_nondigest:
+diff --git a/bin/b4b5-archfix b/bin/b4b5-archfix
+index 1bdaeda..22d8839 100644
+--- a/bin/b4b5-archfix
++++ b/bin/b4b5-archfix
+@@ -44,7 +44,7 @@ import cPickle as pickle
  
  # Required to get the right classes for unpickling
  import paths
@@ -130,7 +290,7 @@ diff -ur mailman-2.1.9/bin/b4b5-archfix mailman-2.1.9-new/bin/b4b5-archfix
  
  PROGRAM = sys.argv[0]
  
-@@ -55,7 +55,7 @@
+@@ -55,7 +55,7 @@ def usage(code, msg=''):
          fd = sys.stderr
      else:
          fd = sys.stdout
@@ -139,10 +299,11 @@ diff -ur mailman-2.1.9/bin/b4b5-archfix mailman-2.1.9-new/bin/b4b5-archfix
      if msg:
          print >> fd, msg
      sys.exit(code)
-diff -ur mailman-2.1.9/bin/change_pw mailman-2.1.9-new/bin/change_pw
---- mailman-2.1.9/bin/change_pw	2005-08-27 03:40:17.000000000 +0200
-+++ mailman-2.1.9-new/bin/change_pw	2007-01-29 14:32:07.000000000 +0100
-@@ -77,6 +77,7 @@
+diff --git a/bin/change_pw b/bin/change_pw
+index 6adabcd..b9a36de 100644
+--- a/bin/change_pw
++++ b/bin/change_pw
+@@ -77,6 +77,7 @@ from Mailman import Message
  from Mailman import i18n
  
  _ = i18n._
@@ -150,7 +311,7 @@ diff -ur mailman-2.1.9/bin/change_pw mailman-2.1.9-new/bin/change_pw
  
  SPACE = ' '
  
-@@ -87,7 +88,7 @@
+@@ -87,7 +88,7 @@ def usage(code, msg=''):
          fd = sys.stderr
      else:
          fd = sys.stdout
@@ -159,7 +320,7 @@ diff -ur mailman-2.1.9/bin/change_pw mailman-2.1.9-new/bin/change_pw
      if msg:
          print >> fd, msg
      sys.exit(code)
-@@ -103,7 +104,7 @@
+@@ -103,7 +104,7 @@ def openlist(listname):
          try:
              mlist = MailList.MailList(listname, lock=0)
          except Errors.MMListError, e:
@@ -168,21 +329,7 @@ diff -ur mailman-2.1.9/bin/change_pw mailman-2.1.9-new/bin/change_pw
          _listcache[listname] = mlist
      return mlist
  
-@@ -141,11 +142,11 @@
- 
-     if args:
-         strargs = SPACE.join(args)
--        usage(1, _('Bad arguments: %(strargs)s'))
-+        usage(1, C_('Bad arguments: %(strargs)s'))
- 
-     if password is not None:
-         if not password:
--            usage(1, _('Empty list passwords are not allowed'))
-+            usage(1, C_('Empty list passwords are not allowed'))
-         shapassword = sha.new(password).hexdigest()
- 
-     if domains:
-@@ -155,7 +156,7 @@
+@@ -155,7 +156,7 @@ def main():
                  listnames[name] = 1
  
      if not listnames:
@@ -191,7 +338,7 @@ diff -ur mailman-2.1.9/bin/change_pw mailman-2.1.9-new/bin/change_pw
          sys.exit(0)
  
      # Set the password on the lists
-@@ -177,7 +178,7 @@
+@@ -177,7 +178,7 @@ def main():
              mlist.Unlock()
  
          # Notification
@@ -200,13 +347,11 @@ diff -ur mailman-2.1.9/bin/change_pw mailman-2.1.9-new/bin/change_pw
          if not quiet:
              otrans = i18n.get_translation()
              i18n.set_language(mlist.preferred_language)
-Nur in mailman-2.1.9-new/bin: change_pw~.
-Nur in mailman-2.1.9-new/bin: change_pw.orig.
-Nur in mailman-2.1.9-new/bin: change_pw.rej.
-diff -ur mailman-2.1.9/bin/check_db mailman-2.1.9-new/bin/check_db
---- mailman-2.1.9/bin/check_db	2005-08-27 03:40:17.000000000 +0200
-+++ mailman-2.1.9-new/bin/check_db	2007-01-29 14:29:46.000000000 +0100
-@@ -59,7 +59,7 @@
+diff --git a/bin/check_db b/bin/check_db
+index b1157bc..40fa0a2 100755
+--- a/bin/check_db
++++ b/bin/check_db
+@@ -59,7 +59,7 @@ import paths
  from Mailman import mm_cfg
  from Mailman import Utils
  from Mailman.MailList import MailList
@@ -215,7 +360,7 @@ diff -ur mailman-2.1.9/bin/check_db mailman-2.1.9-new/bin/check_db
  
  PROGRAM = sys.argv[0]
  
-@@ -70,7 +70,7 @@
+@@ -70,7 +70,7 @@ def usage(code, msg=''):
          fd = sys.stderr
      else:
          fd = sys.stdout
@@ -224,7 +369,7 @@ diff -ur mailman-2.1.9/bin/check_db mailman-2.1.9-new/bin/check_db
      if msg:
          print >> fd, msg
      sys.exit(code)
-@@ -111,12 +111,12 @@
+@@ -111,12 +111,12 @@ def main():
  
      listnames = [n.lower().strip() for n in listnames]
      if not listnames:
@@ -239,7 +384,7 @@ diff -ur mailman-2.1.9/bin/check_db mailman-2.1.9-new/bin/check_db
              continue
          mlist = MailList(listname, lock=0)
          pfile = os.path.join(mlist.fullpath(), 'config.pck')
-@@ -125,7 +125,7 @@
+@@ -125,7 +125,7 @@ def main():
          dlast = dfile + '.last'
  
          if verbose:
@@ -248,7 +393,7 @@ diff -ur mailman-2.1.9/bin/check_db mailman-2.1.9-new/bin/check_db
  
          for file in (pfile, plast, dfile, dlast):
              status = 0
-@@ -145,7 +145,7 @@
+@@ -145,7 +145,7 @@ def main():
                  else:
                      print '    %s: %s' % (file, status)
              elif verbose:
@@ -257,10 +402,11 @@ diff -ur mailman-2.1.9/bin/check_db mailman-2.1.9-new/bin/check_db
  
  
  
-diff -ur mailman-2.1.9/bin/check_perms mailman-2.1.9-new/bin/check_perms
---- mailman-2.1.9/bin/check_perms	2007-01-29 14:37:43.000000000 +0100
-+++ mailman-2.1.9-new/bin/check_perms	2007-01-29 14:29:46.000000000 +0100
-@@ -44,7 +44,7 @@
+diff --git a/bin/check_perms b/bin/check_perms
+index eb80b2d..5ef3306 100755
+--- a/bin/check_perms
++++ b/bin/check_perms
+@@ -45,7 +45,7 @@ directory.  You must run this from the installation directory instead.
      raise
  from Mailman import mm_cfg
  from Mailman.mm_cfg import MAILMAN_USER, MAILMAN_GROUP
@@ -269,7 +415,7 @@ diff -ur mailman-2.1.9/bin/check_perms mailman-2.1.9-new/bin/check_perms
  
  # Let KeyErrors percolate
  MAILMAN_GID = grp.getgrnam(MAILMAN_GROUP)[2]
-@@ -105,7 +105,7 @@
+@@ -107,7 +107,7 @@ def checkwalk(arg, dirname, names):
      for name in names:
          path = os.path.join(dirname, name)
          if arg.VERBOSE:
@@ -278,7 +424,7 @@ diff -ur mailman-2.1.9/bin/check_perms mailman-2.1.9-new/bin/check_perms
          try:
              mode, gid = statgidmode(path)
          except OSError, e:
-@@ -117,10 +117,10 @@
+@@ -119,10 +119,10 @@ def checkwalk(arg, dirname, names):
              except KeyError:
                  groupname = '<anon gid %d>' % gid
              arg.ERRORS += 1
@@ -292,8 +438,8 @@ diff -ur mailman-2.1.9/bin/check_perms mailman-2.1.9-new/bin/check_perms
                  os.chown(path, -1, MAILMAN_GID)
              else:
                  print
-@@ -140,19 +140,19 @@
-             octperms = oct(targetperms)
+@@ -148,19 +148,19 @@ def checkwalk(arg, dirname, names):
+         octperms = oct(targetperms)
          if S_ISDIR(mode) and (mode & targetperms) <> targetperms:
              arg.ERRORS += 1
 -            print _('directory permissions must be %(octperms)s: %(path)s'),
@@ -316,7 +462,7 @@ diff -ur mailman-2.1.9/bin/check_perms mailman-2.1.9-new/bin/check_perms
                      os.chmod(path, mode | PYFILEPERMS)
                  else:
                      print
-@@ -160,10 +160,10 @@
+@@ -168,10 +168,10 @@ def checkwalk(arg, dirname, names):
              # Article files must be group writeable
              octperms = oct(ARTICLEFILEPERMS)
              if mode & ARTICLEFILEPERMS <> ARTICLEFILEPERMS:
@@ -329,7 +475,7 @@ diff -ur mailman-2.1.9/bin/check_perms mailman-2.1.9-new/bin/check_perms
                      os.chmod(path, mode | ARTICLEFILEPERMS)
                  else:
                      print
-@@ -172,7 +172,7 @@
+@@ -180,7 +180,7 @@ def checkall():
      # first check PREFIX
      if STATE.VERBOSE:
          prefix = mm_cfg.PREFIX
@@ -338,7 +484,7 @@ diff -ur mailman-2.1.9/bin/check_perms mailman-2.1.9-new/bin/check_perms
      dirs = {}
      for d in (mm_cfg.PREFIX, mm_cfg.EXEC_PREFIX, mm_cfg.VAR_PREFIX,
                mm_cfg.CONFIG_DIR, mm_cfg.DATA_DIR, mm_cfg.LOCK_DIR,
-@@ -183,13 +183,13 @@
+@@ -191,13 +191,13 @@ def checkall():
              mode = statmode(d)
          except OSError, e:
              if e.errno <> errno.ENOENT: raise
@@ -355,7 +501,7 @@ diff -ur mailman-2.1.9/bin/check_perms mailman-2.1.9-new/bin/check_perms
                  os.chmod(d, mode | DIRPERMS)
              else:
                  print
-@@ -199,14 +199,14 @@
+@@ -207,14 +207,14 @@ def checkall():
  def checkarchives():
      private = mm_cfg.PRIVATE_ARCHIVE_FILE_DIR
      if STATE.VERBOSE:
@@ -373,7 +519,7 @@ diff -ur mailman-2.1.9/bin/check_perms mailman-2.1.9-new/bin/check_perms
              os.chmod(private, mode & ~S_IROTH)
          else:
              print
-@@ -230,9 +230,9 @@
+@@ -238,9 +238,9 @@ def checkmboxfile(mboxdir):
          mode = statmode(mboxfile)
          if (mode & MBOXPERMS) <> MBOXPERMS:
              STATE.ERRORS = STATE.ERRORS + 1
@@ -385,7 +531,7 @@ diff -ur mailman-2.1.9/bin/check_perms mailman-2.1.9-new/bin/check_perms
                  os.chmod(mboxfile, mode | MBOXPERMS)
              else:
                  print
-@@ -253,9 +253,9 @@
+@@ -261,9 +261,9 @@ def checkarchivedbs():
              continue
          if mode & S_IRWXO:
              STATE.ERRORS += 1
@@ -397,7 +543,7 @@ diff -ur mailman-2.1.9/bin/check_perms mailman-2.1.9-new/bin/check_perms
                  os.chmod(dbdir, mode & ~S_IRWXO)
              else:
                  print
-@@ -263,18 +263,18 @@
+@@ -271,18 +271,18 @@ def checkarchivedbs():
  def checkcgi():
      cgidir = os.path.join(mm_cfg.EXEC_PREFIX, 'cgi-bin')
      if STATE.VERBOSE:
@@ -420,7 +566,7 @@ diff -ur mailman-2.1.9/bin/check_perms mailman-2.1.9-new/bin/check_perms
                  os.chmod(path, mode | S_ISGID)
              else:
                  print
-@@ -282,13 +282,13 @@
+@@ -290,13 +290,13 @@ def checkcgi():
  def checkmail():
      wrapper = os.path.join(mm_cfg.WRAPPER_DIR, 'mailman')
      if STATE.VERBOSE:
@@ -437,7 +583,7 @@ diff -ur mailman-2.1.9/bin/check_perms mailman-2.1.9-new/bin/check_perms
              os.chmod(wrapper, mode | S_ISGID)
  
  def checkadminpw():
-@@ -296,7 +296,7 @@
+@@ -304,7 +304,7 @@ def checkadminpw():
                     os.path.join(mm_cfg.DATA_DIR, 'creator.pw')):
          targetmode = S_IFREG | S_IRUSR | S_IWUSR | S_IRGRP
          if STATE.VERBOSE:
@@ -446,7 +592,7 @@ diff -ur mailman-2.1.9/bin/check_perms mailman-2.1.9-new/bin/check_perms
          try:
              mode = statmode(pwfile)
          except OSError, e:
-@@ -305,10 +305,10 @@
+@@ -313,10 +313,10 @@ def checkadminpw():
          if mode <> targetmode:
              STATE.ERRORS += 1
              octmode = oct(mode)
@@ -460,14 +606,16 @@ diff -ur mailman-2.1.9/bin/check_perms mailman-2.1.9-new/bin/check_perms
                  os.chmod(pwfile, targetmode)
              else:
                  print
-@@ -329,13 +329,13 @@
-                   'next-digest', 'next-digest-topics',
+@@ -338,7 +338,7 @@ def checkdata():
+                   'digest.mbox', 'pending.pck',
                    'request.db', 'request.db.tmp')
      if STATE.VERBOSE:
 -        print _('checking permissions on list data')
 +        print C_('checking permissions on list data')
      # BAW: This needs to be converted to the Site module abstraction
      for dir in os.listdir(mm_cfg.LIST_DATA_DIR):
+         if not os.path.isdir(os.path.join(mm_cfg.LIST_DATA_DIR, dir)):
+@@ -346,7 +346,7 @@ def checkdata():
          for file in checkfiles:
              path = os.path.join(mm_cfg.LIST_DATA_DIR, dir, file)
              if STATE.VERBOSE:
@@ -476,7 +624,7 @@ diff -ur mailman-2.1.9/bin/check_perms mailman-2.1.9-new/bin/check_perms
              try:
                  mode = statmode(path)
              except OSError, e:
-@@ -343,9 +343,9 @@
+@@ -354,9 +354,9 @@ def checkdata():
                  continue
              if (mode & targetmode) <> targetmode:
                  STATE.ERRORS += 1
@@ -488,7 +636,7 @@ diff -ur mailman-2.1.9/bin/check_perms mailman-2.1.9-new/bin/check_perms
                      os.chmod(path, mode | targetmode)
                  else:
                      print
-@@ -357,7 +357,7 @@
+@@ -368,7 +368,7 @@ def usage(code, msg=''):
          fd = sys.stderr
      else:
          fd = sys.stdout
@@ -497,7 +645,7 @@ diff -ur mailman-2.1.9/bin/check_perms mailman-2.1.9-new/bin/check_perms
      if msg:
          print >> fd, msg
      sys.exit(code)
-@@ -388,7 +388,7 @@
+@@ -399,7 +399,7 @@ if __name__ == '__main__':
      checkmta()
  
      if not STATE.ERRORS:
@@ -508,11 +656,11 @@ diff -ur mailman-2.1.9/bin/check_perms mailman-2.1.9-new/bin/check_perms
 -        print _('Re-run as %(MAILMAN_USER)s (or root) with -f flag to fix')
 +        print C_('Problems found:'), STATE.ERRORS
 +        print C_('Re-run as %(MAILMAN_USER)s (or root) with -f flag to fix')
-Nur in mailman-2.1.9-new/bin: check_perms.orig.
-diff -ur mailman-2.1.9/bin/cleanarch mailman-2.1.9-new/bin/cleanarch
---- mailman-2.1.9/bin/cleanarch	2006-01-22 21:34:20.000000000 +0100
-+++ mailman-2.1.9-new/bin/cleanarch	2007-01-29 14:29:46.000000000 +0100
-@@ -53,7 +53,7 @@
+diff --git a/bin/cleanarch b/bin/cleanarch
+index a848533..0994bca 100644
+--- a/bin/cleanarch
++++ b/bin/cleanarch
+@@ -53,7 +53,7 @@ import getopt
  import mailbox
  
  import paths
@@ -521,7 +669,7 @@ diff -ur mailman-2.1.9/bin/cleanarch mailman-2.1.9-new/bin/cleanarch
  
  cre = re.compile(mailbox.UnixMailbox._fromlinepattern)
  
-@@ -69,7 +69,7 @@
+@@ -69,7 +69,7 @@ def usage(code, msg=''):
          fd = sys.stderr
      else:
          fd = sys.stdout
@@ -530,7 +678,7 @@ diff -ur mailman-2.1.9/bin/cleanarch mailman-2.1.9-new/bin/cleanarch
      if msg:
          print >> fd, msg
      sys.exit(code)
-@@ -80,7 +80,7 @@
+@@ -80,7 +80,7 @@ def escape_line(line, lineno, quiet, output):
      if output:
          sys.stdout.write('>' + line)
      if not quiet:
@@ -539,7 +687,7 @@ diff -ur mailman-2.1.9/bin/cleanarch mailman-2.1.9-new/bin/cleanarch
          print >> sys.stderr, line[:-1]
  
  
-@@ -108,7 +108,7 @@
+@@ -108,7 +108,7 @@ def main():
              try:
                  status = int(arg)
              except ValueError:
@@ -548,7 +696,7 @@ diff -ur mailman-2.1.9/bin/cleanarch mailman-2.1.9-new/bin/cleanarch
  
      if args:
          usage(1)
-@@ -164,7 +164,7 @@
+@@ -164,7 +164,7 @@ def main():
                  print >> sys.stderr
                  statuscnt = 0
          prevline = line
@@ -557,11 +705,11 @@ diff -ur mailman-2.1.9/bin/cleanarch mailman-2.1.9-new/bin/cleanarch
  
  
  
-Nur in mailman-2.1.9-new/bin: cleanarch.orig.
-diff -ur mailman-2.1.9/bin/clone_member mailman-2.1.9-new/bin/clone_member
---- mailman-2.1.9/bin/clone_member	2005-08-27 03:40:17.000000000 +0200
-+++ mailman-2.1.9-new/bin/clone_member	2007-01-29 14:29:46.000000000 +0100
-@@ -72,7 +72,7 @@
+diff --git a/bin/clone_member b/bin/clone_member
+index 915c540..d9ff224 100755
+--- a/bin/clone_member
++++ b/bin/clone_member
+@@ -72,7 +72,7 @@ import paths
  from Mailman import MailList
  from Mailman import Utils
  from Mailman import Errors
@@ -570,7 +718,7 @@ diff -ur mailman-2.1.9/bin/clone_member mailman-2.1.9-new/bin/clone_member
  
  
  
-@@ -81,7 +81,7 @@
+@@ -81,7 +81,7 @@ def usage(code, msg=''):
          fd = sys.stderr
      else:
          fd = sys.stdout
@@ -579,7 +727,7 @@ diff -ur mailman-2.1.9/bin/clone_member mailman-2.1.9-new/bin/clone_member
      if msg:
          print >> fd, msg
      sys.exit(code)
-@@ -91,14 +91,14 @@
+@@ -91,14 +91,14 @@ def usage(code, msg=''):
  def dolist(mlist, options):
      SPACE = ' '
      if not options.quiet:
@@ -596,7 +744,7 @@ diff -ur mailman-2.1.9/bin/clone_member mailman-2.1.9-new/bin/clone_member
          newowners = {}
          foundp = 0
          for owner in mlist.owner:
-@@ -116,9 +116,9 @@
+@@ -116,9 +116,9 @@ def dolist(mlist, options):
          if not options.quiet:
              if newowners <> oldowners:
                  print
@@ -608,16 +756,16 @@ diff -ur mailman-2.1.9/bin/clone_member mailman-2.1.9-new/bin/clone_member
  
      # see if the fromaddr is a digest member or regular member
      if options.lfromaddr in mlist.getDigestMemberKeys():
-@@ -127,7 +127,7 @@
+@@ -127,7 +127,7 @@ def dolist(mlist, options):
          digest = 0
      else:
          if not options.quiet:
 -            print _('    address not found:'), options.fromaddr
 +            print C_('    address not found:'), options.fromaddr
          return
- 
-     # Now change the membership address
-@@ -136,13 +136,13 @@
+     # Check for banned to address.
+     pattern = mlist.GetBannedPattern(options.toaddr)
+@@ -142,13 +142,13 @@ def dolist(mlist, options):
              mlist.changeMemberAddress(options.fromaddr, options.toaddr,
                                        not options.remove)
          if not options.quiet:
@@ -634,7 +782,7 @@ diff -ur mailman-2.1.9/bin/clone_member mailman-2.1.9-new/bin/clone_member
  
  
  
-@@ -193,7 +193,7 @@
+@@ -199,7 +199,7 @@ def main():
      try:
          Utils.ValidateEmail(toaddr)
      except Errors.EmailAddressError:
@@ -643,7 +791,7 @@ diff -ur mailman-2.1.9/bin/clone_member mailman-2.1.9-new/bin/clone_member
      lfromaddr = fromaddr.lower()
      options.toaddr = toaddr
      options.fromaddr = fromaddr
-@@ -206,7 +206,7 @@
+@@ -212,7 +212,7 @@ def main():
          try:
              mlist = MailList.MailList(listname)
          except Errors.MMListError, e:
@@ -652,10 +800,11 @@ diff -ur mailman-2.1.9/bin/clone_member mailman-2.1.9-new/bin/clone_member
              continue
          try:
              dolist(mlist, options)
-diff -ur mailman-2.1.9/bin/config_list mailman-2.1.9-new/bin/config_list
---- mailman-2.1.9/bin/config_list	2005-12-30 19:50:08.000000000 +0100
-+++ mailman-2.1.9-new/bin/config_list	2007-01-29 14:36:37.000000000 +0100
-@@ -76,6 +76,7 @@
+diff --git a/bin/config_list b/bin/config_list
+index 25d4fb6..e23dac2 100644
+--- a/bin/config_list
++++ b/bin/config_list
+@@ -76,6 +76,7 @@ from Mailman import Errors
  from Mailman import i18n
  
  _ = i18n._
@@ -663,7 +812,7 @@ diff -ur mailman-2.1.9/bin/config_list mailman-2.1.9-new/bin/config_list
  
  NL = '\n'
  nonasciipat = re.compile(r'[\x80-\xff]')
-@@ -87,7 +88,7 @@
+@@ -87,7 +88,7 @@ def usage(code, msg=''):
          fd = sys.stderr
      else:
          fd = sys.stdout
@@ -672,7 +821,7 @@ diff -ur mailman-2.1.9/bin/config_list mailman-2.1.9-new/bin/config_list
      if msg:
          print >> fd, msg
      sys.exit(code)
-@@ -106,7 +107,7 @@
+@@ -106,7 +107,7 @@ def do_output(listname, outfile):
          try:
              mlist = MailList.MailList(listname, lock=0)
          except Errors.MMListError:
@@ -681,7 +830,7 @@ diff -ur mailman-2.1.9/bin/config_list mailman-2.1.9-new/bin/config_list
          # Preamble for the config info. PEP263 charset and capture time.
          language = mlist.preferred_language
          charset = Utils.GetCharSet(language)
-@@ -114,7 +115,7 @@
+@@ -114,7 +115,7 @@ def do_output(listname, outfile):
          if not charset:
              charset = 'us-ascii'
          when = time.ctime(time.time())
@@ -690,7 +839,7 @@ diff -ur mailman-2.1.9/bin/config_list mailman-2.1.9-new/bin/config_list
  # -*- python -*-
  # -*- coding: %(charset)s -*-
  ## "%(listname)s" mailing list configuration settings
-@@ -140,7 +141,7 @@
+@@ -140,7 +141,7 @@ def do_list_categories(mlist, k, subcat, outfp):
      if info is None:
          return
      charset = Utils.GetCharSet(mlist.preferred_language)
@@ -699,7 +848,7 @@ diff -ur mailman-2.1.9/bin/config_list mailman-2.1.9-new/bin/config_list
      print >> outfp, '#'
      # First, massage the descripton text, which could have obnoxious
      # leading whitespace on second and subsequent lines due to
-@@ -199,7 +200,7 @@
+@@ -199,7 +200,7 @@ def do_list_categories(mlist, k, subcat, outfp):
                      outfp.write('"""\n')
          elif vtype in (mm_cfg.Radio, mm_cfg.Toggle):
              print >> outfp, '#'
@@ -708,7 +857,7 @@ diff -ur mailman-2.1.9/bin/config_list mailman-2.1.9-new/bin/config_list
              # TBD: This is disgusting, but it's special cased
              # everywhere else anyway...
              if varname == 'subscribe_policy' and \
-@@ -253,7 +254,7 @@
+@@ -253,7 +254,7 @@ def do_input(listname, infile, checkonly, verbose):
      try:
          mlist = MailList.MailList(listname, lock=not checkonly)
      except Errors.MMListError, e:
@@ -717,7 +866,7 @@ diff -ur mailman-2.1.9/bin/config_list mailman-2.1.9-new/bin/config_list
      savelist = 0
      guibyprop = getPropertyMap(mlist)
      try:
-@@ -266,16 +267,16 @@
+@@ -266,16 +267,16 @@ def do_input(listname, infile, checkonly, verbose):
              if k in ('mlist', '__builtins__'):
                  continue
              if not hasattr(mlist, k):
@@ -737,7 +886,7 @@ diff -ur mailman-2.1.9/bin/config_list mailman-2.1.9-new/bin/config_list
                  setattr(mlist, k, v)
              else:
                  # BAW: This uses non-public methods.  This logic taken from
-@@ -283,9 +284,9 @@
+@@ -283,9 +284,9 @@ def do_input(listname, infile, checkonly, verbose):
                  try:
                      validval = gui._getValidValue(mlist, k, wtype, v)
                  except ValueError:
@@ -749,7 +898,7 @@ diff -ur mailman-2.1.9/bin/config_list mailman-2.1.9-new/bin/config_list
                          'Bad email address for option %(k)s: %(v)s')
                  else:
                      # BAW: Horrible hack, but then this is special cased
-@@ -342,13 +343,13 @@
+@@ -342,13 +343,13 @@ def main():
  
      # sanity check
      if infile is not None and outfile is not None:
@@ -766,14 +915,11 @@ diff -ur mailman-2.1.9/bin/config_list mailman-2.1.9-new/bin/config_list
      listname = args[0].lower().strip()
  
      if outfile:
-Nur in mailman-2.1.9-new/bin: config_list~.
-Nur in mailman-2.1.9-new/bin: config_list.orig.
-Nur in mailman-2.1.9-new/bin: config_list.orig~.
-Nur in mailman-2.1.9-new/bin: config_list.rej.
-diff -ur mailman-2.1.9/bin/convert.py mailman-2.1.9-new/bin/convert.py
---- mailman-2.1.9/bin/convert.py	2005-08-27 03:40:17.000000000 +0200
-+++ mailman-2.1.9-new/bin/convert.py	2007-01-29 14:29:46.000000000 +0100
-@@ -25,7 +25,7 @@
+diff --git a/bin/convert.py b/bin/convert.py
+index b0d6a05..ad7228b 100644
+--- a/bin/convert.py
++++ b/bin/convert.py
+@@ -25,7 +25,7 @@ This script is intended to be run as a bin/withlist script, i.e.
  
  import paths
  from Mailman import Utils
@@ -782,7 +928,7 @@ diff -ur mailman-2.1.9/bin/convert.py mailman-2.1.9-new/bin/convert.py
  
  def convert(mlist):
      for attr in ('msg_header', 'msg_footer', 'digest_header', 'digest_footer',
-@@ -35,10 +35,10 @@
+@@ -35,10 +35,10 @@ def convert(mlist):
          t = Utils.to_dollar(s)
          setattr(mlist, attr, t)
      mlist.use_dollar_strings = 1
@@ -795,10 +941,11 @@ diff -ur mailman-2.1.9/bin/convert.py mailman-2.1.9-new/bin/convert.py
  if __name__ == '__main__':
 -    print _(__doc__.replace('%', '%%'))
 +    print C_(__doc__.replace('%', '%%'))
-diff -ur mailman-2.1.9/bin/discard mailman-2.1.9-new/bin/discard
---- mailman-2.1.9/bin/discard	2005-08-27 03:40:17.000000000 +0200
-+++ mailman-2.1.9-new/bin/discard	2007-01-29 14:29:46.000000000 +0100
-@@ -41,7 +41,7 @@
+diff --git a/bin/discard b/bin/discard
+index c301984..34cb811 100644
+--- a/bin/discard
++++ b/bin/discard
+@@ -41,7 +41,7 @@ import getopt
  import paths
  from Mailman import mm_cfg
  from Mailman.MailList import MailList
@@ -807,7 +954,7 @@ diff -ur mailman-2.1.9/bin/discard mailman-2.1.9-new/bin/discard
  
  try:
      True, False
-@@ -58,7 +58,7 @@
+@@ -58,7 +58,7 @@ def usage(code, msg=''):
          fd = sys.stderr
      else:
          fd = sys.stdout
@@ -816,7 +963,7 @@ diff -ur mailman-2.1.9/bin/discard mailman-2.1.9-new/bin/discard
      if msg:
          print >> fd, msg
      sys.exit(code)
-@@ -80,7 +80,7 @@
+@@ -80,7 +80,7 @@ def main():
  
      files = args
      if not files:
@@ -825,7 +972,7 @@ diff -ur mailman-2.1.9/bin/discard mailman-2.1.9-new/bin/discard
  
      # Mapping from listnames to sequence of request ids
      discards = {}
-@@ -91,13 +91,13 @@
+@@ -91,13 +91,13 @@ def main():
          basename = os.path.basename(f)
          mo = cre.match(basename)
          if not mo:
@@ -841,7 +988,7 @@ diff -ur mailman-2.1.9/bin/discard mailman-2.1.9-new/bin/discard
              continue
          discards.setdefault(listname, []).append(id)
  
-@@ -109,7 +109,7 @@
+@@ -109,7 +109,7 @@ def main():
                  # No comment, no preserve, no forward, no forwarding address
                  mlist.HandleRequest(id, mm_cfg.DISCARD, '', False, False, '')
                  if not quiet:
@@ -850,19 +997,20 @@ diff -ur mailman-2.1.9/bin/discard mailman-2.1.9-new/bin/discard
              mlist.Save()
          finally:
              mlist.Unlock()
-diff -ur mailman-2.1.9/bin/dumpdb mailman-2.1.9-new/bin/dumpdb
---- mailman-2.1.9/bin/dumpdb	2005-08-27 03:40:17.000000000 +0200
-+++ mailman-2.1.9-new/bin/dumpdb	2007-01-29 14:33:15.000000000 +0100
-@@ -55,7 +55,7 @@
+diff --git a/bin/dumpdb b/bin/dumpdb
+index c8e4246..0b58fae 100644
+--- a/bin/dumpdb
++++ b/bin/dumpdb
+@@ -54,7 +54,7 @@ from types import StringType
+ 
  import paths
  # Import this /after/ paths so that the sys.path is properly hacked
- from email.Generator import Generator
 -from Mailman.i18n import _
 +from Mailman.i18n import C_
  
  PROGRAM = sys.argv[0]
  COMMASPACE = ', '
-@@ -73,7 +73,7 @@
+@@ -72,7 +72,7 @@ def usage(code, msg=''):
          fd = sys.stderr
      else:
          fd = sys.stdout
@@ -871,7 +1019,7 @@ diff -ur mailman-2.1.9/bin/dumpdb mailman-2.1.9-new/bin/dumpdb
      if msg:
          print >> fd, msg
      sys.exit(code)
-@@ -103,10 +103,10 @@
+@@ -102,10 +102,10 @@ def main():
              doprint = False
  
      if len(args) < 1:
@@ -884,7 +1032,7 @@ diff -ur mailman-2.1.9/bin/dumpdb mailman-2.1.9-new/bin/dumpdb
      else:
          filename = args[0]
  
-@@ -116,7 +116,7 @@
+@@ -115,7 +115,7 @@ def main():
          elif filename.endswith('.pck'):
              filetype = 0
          else:
@@ -893,33 +1041,31 @@ diff -ur mailman-2.1.9/bin/dumpdb mailman-2.1.9-new/bin/dumpdb
  
      # Handle dbs
      pp = pprint.PrettyPrinter(indent=4)
-@@ -133,16 +133,16 @@
-         try:
-             cnt = 1
-             if doprint:
--                print _('[----- start pickle file -----]')
-+                print C_('[----- start pickle file -----]')
-             while True:
-                 try:
-                     obj = load(fp)
-                 except EOFError:
-                     if doprint:
--                        print _('[----- end pickle file -----]')
-+                        print C_('[----- end pickle file -----]')
-                     break
+@@ -130,16 +130,16 @@ def main():
+     try:
+         cnt = 1
+         if doprint:
+-            print _('[----- start %(typename)s file -----]')
++            print C_('[----- start %(typename)s file -----]')
+         while True:
+             try:
+                 obj = load(fp)
+             except EOFError:
                  if doprint:
--                    print _('<----- start object %(cnt)s ----->')
-+                    print C_('<----- start object %(cnt)s ----->')
-                     if isinstance(obj, StringType):
-                         print obj
-                     else:
-Nur in mailman-2.1.9-new/bin: dumpdb~.
-Nur in mailman-2.1.9-new/bin: dumpdb.orig.
-Nur in mailman-2.1.9-new/bin: dumpdb.rej.
-diff -ur mailman-2.1.9/bin/find_member mailman-2.1.9-new/bin/find_member
---- mailman-2.1.9/bin/find_member	2005-08-27 03:40:17.000000000 +0200
-+++ mailman-2.1.9-new/bin/find_member	2007-01-29 14:29:46.000000000 +0100
-@@ -64,7 +64,7 @@
+-                    print _('[----- end %(typename)s file -----]')
++                    print C_('[----- end %(typename)s file -----]')
+                 break
+             if doprint:
+-                print _('<----- start object %(cnt)s ----->')
++                print C_('<----- start object %(cnt)s ----->')
+                 if isinstance(obj, StringType):
+                     print obj
+                 else:
+diff --git a/bin/find_member b/bin/find_member
+index a1701bf..99e4ee6 100755
+--- a/bin/find_member
++++ b/bin/find_member
+@@ -64,7 +64,7 @@ import paths
  from Mailman import Utils
  from Mailman import MailList
  from Mailman import Errors
@@ -928,7 +1074,7 @@ diff -ur mailman-2.1.9/bin/find_member mailman-2.1.9-new/bin/find_member
  
  AS_MEMBER = 0x01
  AS_OWNER = 0x02
-@@ -76,7 +76,7 @@
+@@ -76,7 +76,7 @@ def usage(code, msg=''):
          fd = sys.stderr
      else:
          fd = sys.stdout
@@ -937,7 +1083,7 @@ diff -ur mailman-2.1.9/bin/find_member mailman-2.1.9-new/bin/find_member
      if msg:
          print >> fd, msg
      sys.exit(code)
-@@ -94,7 +94,7 @@
+@@ -94,7 +94,7 @@ def scanlists(options):
          try:
              mlist = MailList.MailList(listname, lock=0)
          except Errors.MMListError:
@@ -946,7 +1092,7 @@ diff -ur mailman-2.1.9/bin/find_member mailman-2.1.9-new/bin/find_member
              continue
          if options.owners:
              owners = mlist.owner
-@@ -156,12 +156,12 @@
+@@ -156,12 +156,12 @@ def main():
              pass
  
      if not args:
@@ -961,7 +1107,7 @@ diff -ur mailman-2.1.9/bin/find_member mailman-2.1.9-new/bin/find_member
          return
  
      matches = scanlists(options)
-@@ -170,13 +170,13 @@
+@@ -170,13 +170,13 @@ def main():
      for k in addrs:
          hits = matches[k]
          lists = hits.keys()
@@ -977,10 +1123,11 @@ diff -ur mailman-2.1.9/bin/find_member mailman-2.1.9-new/bin/find_member
  
  
  
-diff -ur mailman-2.1.9/bin/fix_url.py mailman-2.1.9-new/bin/fix_url.py
---- mailman-2.1.9/bin/fix_url.py	2005-08-27 03:40:17.000000000 +0200
-+++ mailman-2.1.9-new/bin/fix_url.py	2007-01-29 14:29:46.000000000 +0100
-@@ -43,12 +43,12 @@
+diff --git a/bin/fix_url.py b/bin/fix_url.py
+index d2731c1..6523ce2 100644
+--- a/bin/fix_url.py
++++ b/bin/fix_url.py
+@@ -43,12 +43,12 @@ import getopt
  
  import paths
  from Mailman import mm_cfg
@@ -995,7 +1142,7 @@ diff -ur mailman-2.1.9/bin/fix_url.py mailman-2.1.9-new/bin/fix_url.py
      if msg:
          print msg
      sys.exit(code)
-@@ -77,12 +77,12 @@
+@@ -82,12 +82,12 @@ def fix_url(mlist, *args):
          mailhost = mm_cfg.DEFAULT_EMAIL_HOST
  
      if verbose:
@@ -1011,10 +1158,11 @@ diff -ur mailman-2.1.9/bin/fix_url.py mailman-2.1.9-new/bin/fix_url.py
      mlist.Save()
      mlist.Unlock()
  
-diff -ur mailman-2.1.9/bin/genaliases mailman-2.1.9-new/bin/genaliases
---- mailman-2.1.9/bin/genaliases	2005-08-27 03:40:17.000000000 +0200
-+++ mailman-2.1.9-new/bin/genaliases	2007-01-29 14:29:46.000000000 +0100
-@@ -40,7 +40,7 @@
+diff --git a/bin/genaliases b/bin/genaliases
+index 0a1a3da..29e5b5a 100644
+--- a/bin/genaliases
++++ b/bin/genaliases
+@@ -40,7 +40,7 @@ import paths                                      # path hacking
  from Mailman import mm_cfg
  from Mailman import Utils
  from Mailman import MailList
@@ -1023,7 +1171,7 @@ diff -ur mailman-2.1.9/bin/genaliases mailman-2.1.9-new/bin/genaliases
  
  try:
      True, False
-@@ -55,7 +55,7 @@
+@@ -55,7 +55,7 @@ def usage(code, msg=''):
          fd = sys.stderr
      else:
          fd = sys.stdout
@@ -1032,10 +1180,11 @@ diff -ur mailman-2.1.9/bin/genaliases mailman-2.1.9-new/bin/genaliases
      if msg:
          print >> fd, msg
      sys.exit(code)
-diff -ur mailman-2.1.9/bin/inject mailman-2.1.9-new/bin/inject
---- mailman-2.1.9/bin/inject	2005-08-27 03:40:17.000000000 +0200
-+++ mailman-2.1.9-new/bin/inject	2007-01-29 14:29:46.000000000 +0100
-@@ -47,7 +47,7 @@
+diff --git a/bin/inject b/bin/inject
+index 432c292..fa91f5e 100644
+--- a/bin/inject
++++ b/bin/inject
+@@ -48,7 +48,7 @@ import paths
  from Mailman import mm_cfg
  from Mailman import Utils
  from Mailman import Post
@@ -1044,7 +1193,7 @@ diff -ur mailman-2.1.9/bin/inject mailman-2.1.9-new/bin/inject
  
  
  
-@@ -56,7 +56,7 @@
+@@ -57,7 +57,7 @@ def usage(code, msg=''):
          fd = sys.stderr
      else:
          fd = sys.stdout
@@ -1053,14 +1202,14 @@ diff -ur mailman-2.1.9/bin/inject mailman-2.1.9-new/bin/inject
      if msg:
          print >> fd, msg
      sys.exit(code)
-@@ -80,14 +80,14 @@
+@@ -81,14 +81,14 @@ def main():
          elif opt in ('-q', '--queue'):
              qdir = os.path.join(mm_cfg.QUEUE_DIR, arg)
              if not os.path.isdir(qdir):
 -                usage(1, _('Bad queue directory: %(qdir)s'))
 +                usage(1, C_('Bad queue directory: %(qdir)s'))
          elif opt in ('-l', '--listname'):
-             listname = arg
+             listname = arg.lower()
  
      if listname is None:
 -        usage(1, _('A list name is required'))
@@ -1068,13 +1217,14 @@ diff -ur mailman-2.1.9/bin/inject mailman-2.1.9-new/bin/inject
      elif not Utils.list_exists(listname):
 -        usage(1, _('No such list: %(listname)s'))
 +        usage(1, C_('No such list: %(listname)s'))
-               
+ 
      if len(args) == 0:
          # Use standard input
-diff -ur mailman-2.1.9/bin/list_admins mailman-2.1.9-new/bin/list_admins
---- mailman-2.1.9/bin/list_admins	2005-08-27 03:40:17.000000000 +0200
-+++ mailman-2.1.9-new/bin/list_admins	2007-01-29 14:29:46.000000000 +0100
-@@ -44,7 +44,7 @@
+diff --git a/bin/list_admins b/bin/list_admins
+index b86a5eb..f9304c7 100644
+--- a/bin/list_admins
++++ b/bin/list_admins
+@@ -45,7 +45,7 @@ import getopt
  import paths
  from Mailman import MailList, Utils
  from Mailman import Errors
@@ -1083,7 +1233,7 @@ diff -ur mailman-2.1.9/bin/list_admins mailman-2.1.9-new/bin/list_admins
  
  COMMASPACE = ', '
  
-@@ -57,7 +57,7 @@
+@@ -58,7 +58,7 @@ def usage(code, msg=''):
          fd = sys.stderr
      else:
          fd = sys.stdout
@@ -1092,7 +1242,7 @@ diff -ur mailman-2.1.9/bin/list_admins mailman-2.1.9-new/bin/list_admins
      if msg:
          print >> fd, msg
      sys.exit(code)
-@@ -86,14 +86,14 @@
+@@ -87,14 +87,14 @@ def main():
         try:
             mlist = MailList.MailList(listname, lock=0)
         except Errors.MMListError, e:
@@ -1109,10 +1259,11 @@ diff -ur mailman-2.1.9/bin/list_admins mailman-2.1.9-new/bin/list_admins
  
  
  
-diff -ur mailman-2.1.9/bin/list_lists mailman-2.1.9-new/bin/list_lists
---- mailman-2.1.9/bin/list_lists	2005-08-27 03:40:17.000000000 +0200
-+++ mailman-2.1.9-new/bin/list_lists	2007-01-29 14:29:46.000000000 +0100
-@@ -47,7 +47,7 @@
+diff --git a/bin/list_lists b/bin/list_lists
+index 870759b..004db2a 100644
+--- a/bin/list_lists
++++ b/bin/list_lists
+@@ -47,7 +47,7 @@ from Mailman import mm_cfg
  from Mailman import MailList
  from Mailman import Utils
  from Mailman import Errors
@@ -1121,7 +1272,7 @@ diff -ur mailman-2.1.9/bin/list_lists mailman-2.1.9-new/bin/list_lists
  
  program = sys.argv[0]
  
-@@ -56,7 +56,7 @@
+@@ -56,7 +56,7 @@ def usage(code, msg=''):
          fd = sys.stderr
      else:
          fd = sys.stdout
@@ -1130,7 +1281,7 @@ diff -ur mailman-2.1.9/bin/list_lists mailman-2.1.9-new/bin/list_lists
      if msg:
          print >> fd, msg
      sys.exit(code)
-@@ -102,18 +102,18 @@
+@@ -102,18 +102,18 @@ def main():
          longest = max(len(mlist.real_name), longest)
  
      if not mlists and not bare:
@@ -1152,10 +1303,11 @@ diff -ur mailman-2.1.9/bin/list_lists mailman-2.1.9-new/bin/list_lists
              print '   ', format % (mlist.real_name, description)
  
  
-diff -ur mailman-2.1.9/bin/list_members mailman-2.1.9-new/bin/list_members
---- mailman-2.1.9/bin/list_members	2005-08-27 03:40:17.000000000 +0200
-+++ mailman-2.1.9-new/bin/list_members	2007-01-29 14:29:46.000000000 +0100
-@@ -76,7 +76,7 @@
+diff --git a/bin/list_members b/bin/list_members
+index cb57408..7e51ddc 100755
+--- a/bin/list_members
++++ b/bin/list_members
+@@ -76,7 +76,7 @@ from Mailman import Utils
  from Mailman import MailList
  from Mailman import Errors
  from Mailman import MemberAdaptor
@@ -1164,7 +1316,7 @@ diff -ur mailman-2.1.9/bin/list_members mailman-2.1.9-new/bin/list_members
  
  from email.Utils import formataddr
  
-@@ -104,7 +104,7 @@
+@@ -104,7 +104,7 @@ def usage(code, msg=''):
          fd = sys.stderr
      else:
          fd = sys.stdout
@@ -1173,7 +1325,7 @@ diff -ur mailman-2.1.9/bin/list_members mailman-2.1.9-new/bin/list_members
      if msg:
          print >> fd, msg
      sys.exit(code)
-@@ -188,7 +188,7 @@
+@@ -188,7 +188,7 @@ def main():
              if i >= 0:
                  why = opt[i+1:]
                  if why not in WHYCHOICES.keys():
@@ -1182,7 +1334,7 @@ diff -ur mailman-2.1.9/bin/list_members mailman-2.1.9-new/bin/list_members
          elif opt == '-d':
              digest = True
              if args and args[0] in ('mime', 'plain'):
-@@ -199,7 +199,7 @@
+@@ -199,7 +199,7 @@ def main():
              if i >= 0:
                  kind = opt[i+1:]
                  if kind not in ('mime', 'plain'):
@@ -1191,7 +1343,7 @@ diff -ur mailman-2.1.9/bin/list_members mailman-2.1.9-new/bin/list_members
          elif opt in ('-i', '--invalid'):
              invalidonly = True
          elif opt in ('-u', '--unicode'):
-@@ -221,7 +221,7 @@
+@@ -221,7 +221,7 @@ def main():
          try:
              fp = open(outfile, 'w')
          except IOError:
@@ -1200,7 +1352,7 @@ diff -ur mailman-2.1.9/bin/list_members mailman-2.1.9-new/bin/list_members
              sys.exit(1)
      else:
          fp = sys.stdout
-@@ -229,7 +229,7 @@
+@@ -229,7 +229,7 @@ def main():
      try:
          mlist = MailList.MailList(listname, lock=False)
      except Errors.MMListError, e:
@@ -1209,10 +1361,11 @@ diff -ur mailman-2.1.9/bin/list_members mailman-2.1.9-new/bin/list_members
          sys.exit(1)
  
      # Get the lowercased member addresses
-diff -ur mailman-2.1.9/bin/list_owners mailman-2.1.9-new/bin/list_owners
---- mailman-2.1.9/bin/list_owners	2005-08-27 03:40:17.000000000 +0200
-+++ mailman-2.1.9-new/bin/list_owners	2007-01-29 14:29:46.000000000 +0100
-@@ -44,7 +44,7 @@
+diff --git a/bin/list_owners b/bin/list_owners
+index 4c2d908..adcba10 100644
+--- a/bin/list_owners
++++ b/bin/list_owners
+@@ -45,7 +45,7 @@ import getopt
  import paths
  from Mailman import Utils
  from Mailman.MailList import MailList
@@ -1221,7 +1374,7 @@ diff -ur mailman-2.1.9/bin/list_owners mailman-2.1.9-new/bin/list_owners
  
  PROGRAM = sys.argv[0]
  
-@@ -61,7 +61,7 @@
+@@ -62,7 +62,7 @@ def usage(code, msg=''):
          fd = sys.stderr
      else:
          fd = sys.stdout
@@ -1230,10 +1383,11 @@ diff -ur mailman-2.1.9/bin/list_owners mailman-2.1.9-new/bin/list_owners
      if msg:
          print >> fd, msg
      sys.exit(code)
-diff -ur mailman-2.1.9/bin/mailmanctl mailman-2.1.9-new/bin/mailmanctl
---- mailman-2.1.9/bin/mailmanctl	2007-01-29 14:37:43.000000000 +0100
-+++ mailman-2.1.9-new/bin/mailmanctl	2007-01-29 14:29:46.000000000 +0100
-@@ -111,7 +111,7 @@
+diff --git a/bin/mailmanctl b/bin/mailmanctl
+index 3d59d57..2a5085d 100644
+--- a/bin/mailmanctl
++++ b/bin/mailmanctl
+@@ -111,7 +111,7 @@ from Mailman import Utils
  from Mailman import LockFile
  from Mailman import Errors
  from Mailman.MailList import MailList
@@ -1242,7 +1396,7 @@ diff -ur mailman-2.1.9/bin/mailmanctl mailman-2.1.9-new/bin/mailmanctl
  from Mailman.Logging.Syslog import syslog
  from Mailman.Logging.Utils import LogStdErr
  
-@@ -136,7 +136,7 @@
+@@ -136,7 +136,7 @@ def usage(code, msg=''):
          fd = sys.stderr
      else:
          fd = sys.stdout
@@ -1251,7 +1405,7 @@ diff -ur mailman-2.1.9/bin/mailmanctl mailman-2.1.9-new/bin/mailmanctl
      if msg:
          print >> fd, msg
      sys.exit(code)
-@@ -152,17 +152,17 @@
+@@ -152,17 +152,17 @@ def kill_watcher(sig):
      except (IOError, ValueError), e:
          # For i18n convenience
          pidfile = mm_cfg.PIDFILE
@@ -1273,7 +1427,7 @@ diff -ur mailman-2.1.9/bin/mailmanctl mailman-2.1.9-new/bin/mailmanctl
          os.unlink(mm_cfg.PIDFILE)
  
  
-@@ -266,19 +266,19 @@
+@@ -266,19 +266,19 @@ def acquire_lock(force):
          status = qrunner_state()
          if status == 1:
              # host matches and proc exists
@@ -1296,7 +1450,7 @@ diff -ur mailman-2.1.9/bin/mailmanctl mailman-2.1.9-new/bin/mailmanctl
  The master qrunner lock could not be acquired, because it appears as if some
  process on some other host may have acquired it.  We can't test for stale
  locks across host boundaries, so you'll have to do this manually.  Or, if you
-@@ -325,7 +325,7 @@
+@@ -325,7 +325,7 @@ def check_for_site_list():
      try:
          sitelist = MailList(sitelistname, lock=0)
      except Errors.MMUnknownListError:
@@ -1305,7 +1459,7 @@ diff -ur mailman-2.1.9/bin/mailmanctl mailman-2.1.9-new/bin/mailmanctl
          syslog('error', 'Site list is missing: %s', mm_cfg.MAILMAN_SITE_LIST)
          sys.exit(1)
  
-@@ -350,7 +350,7 @@
+@@ -350,7 +350,7 @@ def check_privs():
          os.setuid(uid)
      elif myuid <> uid:
          name = mm_cfg.MAILMAN_USER
@@ -1314,7 +1468,7 @@ diff -ur mailman-2.1.9/bin/mailmanctl mailman-2.1.9-new/bin/mailmanctl
              'Run this program as root or as the %(name)s user, or use -u.'))
  
  
-@@ -381,10 +381,10 @@
+@@ -381,10 +381,10 @@ def main():
              quiet = 1
  
      if len(args) < 1:
@@ -1327,7 +1481,7 @@ diff -ur mailman-2.1.9/bin/mailmanctl mailman-2.1.9-new/bin/mailmanctl
  
      command = args[0].lower()
  
-@@ -392,7 +392,7 @@
+@@ -392,7 +392,7 @@ def main():
          check_privs()
      else:
          if command != 'status':
@@ -1336,7 +1490,7 @@ diff -ur mailman-2.1.9/bin/mailmanctl mailman-2.1.9-new/bin/mailmanctl
  
      # Handle the commands
      if command == 'stop':
-@@ -400,26 +400,26 @@
+@@ -400,26 +400,26 @@ def main():
          # giving cron/qrunner a ctrl-c or KeyboardInterrupt.  This will
          # effectively shut everything down.
          if not quiet:
@@ -1368,7 +1522,7 @@ diff -ur mailman-2.1.9/bin/mailmanctl mailman-2.1.9-new/bin/mailmanctl
          sys.exit(status)
      elif command == 'start':
          # First, complain loudly if there's no site list.
-@@ -455,7 +455,7 @@
+@@ -455,7 +455,7 @@ def main():
          if pid:
              # parent
              if not quiet:
@@ -1377,12 +1531,11 @@ diff -ur mailman-2.1.9/bin/mailmanctl mailman-2.1.9-new/bin/mailmanctl
              # Give up the lock "ownership".  This just means the foreground
              # process won't close/unlock the lock when it finalizes this lock
              # instance.  We'll let the mater watcher subproc own the lock.
-Nur in mailman-2.1.9-new/bin: mailmanctl.orig.
-Nur in mailman-2.1.9-new/bin: Makefile.
-diff -ur mailman-2.1.9/bin/mmsitepass mailman-2.1.9-new/bin/mmsitepass
---- mailman-2.1.9/bin/mmsitepass	2005-08-27 03:40:17.000000000 +0200
-+++ mailman-2.1.9-new/bin/mmsitepass	2007-01-29 14:29:46.000000000 +0100
-@@ -43,7 +43,7 @@
+diff --git a/bin/mmsitepass b/bin/mmsitepass
+index 0bb6e77..bb4cc71 100755
+--- a/bin/mmsitepass
++++ b/bin/mmsitepass
+@@ -43,7 +43,7 @@ import getopt
  
  import paths
  from Mailman import Utils
@@ -1391,7 +1544,7 @@ diff -ur mailman-2.1.9/bin/mmsitepass mailman-2.1.9-new/bin/mmsitepass
  
  PROGRAM = sys.argv[0]
  
-@@ -54,7 +54,7 @@
+@@ -54,7 +54,7 @@ def usage(code, msg=''):
          fd = sys.stderr
      else:
          fd = sys.stdout
@@ -1400,7 +1553,7 @@ diff -ur mailman-2.1.9/bin/mmsitepass mailman-2.1.9-new/bin/mmsitepass
      if msg:
          print >> fd, msg
      sys.exit(code)
-@@ -70,34 +70,34 @@
+@@ -70,34 +70,34 @@ def main():
  
      # Defaults
      siteadmin = 1
@@ -1443,10 +1596,11 @@ diff -ur mailman-2.1.9/bin/mmsitepass mailman-2.1.9-new/bin/mmsitepass
  
  
  
-diff -ur mailman-2.1.9/bin/newlist mailman-2.1.9-new/bin/newlist
---- mailman-2.1.9/bin/newlist	2005-08-27 03:40:17.000000000 +0200
-+++ mailman-2.1.9-new/bin/newlist	2007-01-29 14:29:46.000000000 +0100
-@@ -104,6 +104,7 @@
+diff --git a/bin/newlist b/bin/newlist
+index f9ca866..e52f340 100755
+--- a/bin/newlist
++++ b/bin/newlist
+@@ -104,6 +104,7 @@ from Mailman import Message
  from Mailman import i18n
  
  _ = i18n._
@@ -1454,7 +1608,7 @@ diff -ur mailman-2.1.9/bin/newlist mailman-2.1.9-new/bin/newlist
  
  PROGRAM = sys.argv[0]
  
-@@ -114,7 +115,7 @@
+@@ -114,7 +115,7 @@ def usage(code, msg=''):
          fd = sys.stderr
      else:
          fd = sys.stdout
@@ -1463,7 +1617,7 @@ diff -ur mailman-2.1.9/bin/newlist mailman-2.1.9-new/bin/newlist
      if msg:
          print >> fd, msg
      sys.exit(code)
-@@ -147,12 +148,12 @@
+@@ -147,12 +148,12 @@ def main():
  
      # Is the language known?
      if lang not in mm_cfg.LC_DESCRIPTIONS.keys():
@@ -1478,7 +1632,7 @@ diff -ur mailman-2.1.9/bin/newlist mailman-2.1.9-new/bin/newlist
      listname = listname.lower()
  
      if '@' in listname:
-@@ -167,22 +168,22 @@
+@@ -167,22 +168,22 @@ def main():
      web_page_url = mm_cfg.DEFAULT_URL_PATTERN % urlhost
  
      if Utils.list_exists(listname):
@@ -1505,7 +1659,7 @@ diff -ur mailman-2.1.9/bin/newlist mailman-2.1.9-new/bin/newlist
  
      mlist = MailList.MailList()
      try:
-@@ -197,11 +198,11 @@
+@@ -202,11 +203,11 @@ def main():
              finally:
                  os.umask(oldmask)
          except Errors.BadListNameError, s:
@@ -1520,7 +1674,7 @@ diff -ur mailman-2.1.9/bin/newlist mailman-2.1.9-new/bin/newlist
  
          # Assign domain-specific attributes
          mlist.host_name = host_name
-@@ -222,7 +223,7 @@
+@@ -227,7 +228,7 @@ def main():
  
      # And send the notice to the list owner
      if not quiet:
@@ -1529,11 +1683,11 @@ diff -ur mailman-2.1.9/bin/newlist mailman-2.1.9-new/bin/newlist
          sys.stdin.readline()
          siteowner = Utils.get_site_email(mlist.host_name, 'owner')
          text = Utils.maketext(
-Nur in mailman-2.1.9-new/bin: newlist.orig.
-diff -ur mailman-2.1.9/bin/qrunner mailman-2.1.9-new/bin/qrunner
---- mailman-2.1.9/bin/qrunner	2006-01-19 02:07:40.000000000 +0100
-+++ mailman-2.1.9-new/bin/qrunner	2007-01-29 14:29:46.000000000 +0100
-@@ -78,7 +78,7 @@
+diff --git a/bin/qrunner b/bin/qrunner
+index 20fe830..29bba0f 100644
+--- a/bin/qrunner
++++ b/bin/qrunner
+@@ -78,7 +78,7 @@ import signal
  
  import paths
  from Mailman import mm_cfg
@@ -1542,7 +1696,7 @@ diff -ur mailman-2.1.9/bin/qrunner mailman-2.1.9-new/bin/qrunner
  from Mailman.Logging.Syslog import syslog
  from Mailman.Logging.Utils import LogStdErr
  
-@@ -95,7 +95,7 @@
+@@ -95,7 +95,7 @@ def usage(code, msg=''):
          fd = sys.stderr
      else:
          fd = sys.stdout
@@ -1551,7 +1705,7 @@ diff -ur mailman-2.1.9/bin/qrunner mailman-2.1.9-new/bin/qrunner
      if msg:
          print >> fd, msg
      sys.exit(code)
-@@ -175,8 +175,8 @@
+@@ -175,8 +175,8 @@ def main():
                      name = runnername[:-len('Runner')]
                  else:
                      name = runnername
@@ -1562,7 +1716,7 @@ diff -ur mailman-2.1.9/bin/qrunner mailman-2.1.9-new/bin/qrunner
              sys.exit(0)
          elif opt in ('-o', '--once'):
              once = 1
-@@ -212,7 +212,7 @@
+@@ -212,7 +212,7 @@ def main():
      if len(args) <> 0:
          usage(1)
      if len(runners) == 0:
@@ -1571,11 +1725,11 @@ diff -ur mailman-2.1.9/bin/qrunner mailman-2.1.9-new/bin/qrunner
  
      # Before we startup qrunners, we redirect the stderr to mailman syslog.
      # We assume !AS_SUBPROC is running for debugging purpose and don't
-Nur in mailman-2.1.9-new/bin: qrunner.orig.
-diff -ur mailman-2.1.9/bin/rb-archfix mailman-2.1.9-new/bin/rb-archfix
---- mailman-2.1.9/bin/rb-archfix	2005-08-27 03:40:17.000000000 +0200
-+++ mailman-2.1.9-new/bin/rb-archfix	2007-01-29 14:29:46.000000000 +0100
-@@ -52,7 +52,7 @@
+diff --git a/bin/rb-archfix b/bin/rb-archfix
+index fceadc2..2b1bef6 100644
+--- a/bin/rb-archfix
++++ b/bin/rb-archfix
+@@ -52,7 +52,7 @@ import cPickle as pickle
  
  # Required to get the right classes for unpickling
  import paths
@@ -1584,7 +1738,7 @@ diff -ur mailman-2.1.9/bin/rb-archfix mailman-2.1.9-new/bin/rb-archfix
  
  PROGRAM = sys.argv[0]
  
-@@ -63,7 +63,7 @@
+@@ -63,7 +63,7 @@ def usage(code, msg=''):
          fd = sys.stderr
      else:
          fd = sys.stdout
@@ -1593,10 +1747,11 @@ diff -ur mailman-2.1.9/bin/rb-archfix mailman-2.1.9-new/bin/rb-archfix
      if msg:
          print >> fd, msg
      sys.exit(code)
-diff -ur mailman-2.1.9/bin/remove_members mailman-2.1.9-new/bin/remove_members
---- mailman-2.1.9/bin/remove_members	2005-12-30 19:50:08.000000000 +0100
-+++ mailman-2.1.9-new/bin/remove_members	2007-01-29 14:29:46.000000000 +0100
-@@ -66,7 +66,7 @@
+diff --git a/bin/remove_members b/bin/remove_members
+index a7b4ebb..33aa6a2 100755
+--- a/bin/remove_members
++++ b/bin/remove_members
+@@ -66,7 +66,7 @@ import paths
  from Mailman import MailList
  from Mailman import Utils
  from Mailman import Errors
@@ -1605,7 +1760,7 @@ diff -ur mailman-2.1.9/bin/remove_members mailman-2.1.9-new/bin/remove_members
  
  try:
      True, False
-@@ -81,7 +81,7 @@
+@@ -81,7 +81,7 @@ def usage(code, msg=''):
          fd = sys.stderr
      else:
          fd = sys.stdout
@@ -1614,7 +1769,7 @@ diff -ur mailman-2.1.9/bin/remove_members mailman-2.1.9-new/bin/remove_members
      if msg:
          print >> fd, msg
      sys.exit(code)
-@@ -153,14 +153,14 @@
+@@ -153,14 +153,14 @@ def main():
          try:
              addresses = addresses + ReadFile(filename)
          except IOError:
@@ -1631,7 +1786,7 @@ diff -ur mailman-2.1.9/bin/remove_members mailman-2.1.9-new/bin/remove_members
             continue
  
         if all:
-@@ -170,12 +170,12 @@
+@@ -170,12 +170,12 @@ def main():
             for addr in addresses:
                 if not mlist.isMember(addr):
                     if not alllists:
@@ -1646,10 +1801,11 @@ diff -ur mailman-2.1.9/bin/remove_members mailman-2.1.9-new/bin/remove_members
             mlist.Save()
         finally:
             mlist.Unlock()
-diff -ur mailman-2.1.9/bin/rmlist mailman-2.1.9-new/bin/rmlist
---- mailman-2.1.9/bin/rmlist	2005-08-27 03:40:17.000000000 +0200
-+++ mailman-2.1.9-new/bin/rmlist	2007-01-29 14:29:46.000000000 +0100
-@@ -45,7 +45,7 @@
+diff --git a/bin/rmlist b/bin/rmlist
+index fbaf306..8b58a3c 100755
+--- a/bin/rmlist
++++ b/bin/rmlist
+@@ -45,7 +45,7 @@ import paths
  from Mailman import mm_cfg
  from Mailman import Utils
  from Mailman import MailList
@@ -1658,7 +1814,7 @@ diff -ur mailman-2.1.9/bin/rmlist mailman-2.1.9-new/bin/rmlist
  
  try:
      True, False
-@@ -60,7 +60,7 @@
+@@ -60,7 +60,7 @@ def usage(code, msg=''):
          fd = sys.stderr
      else:
          fd = sys.stdout
@@ -1667,7 +1823,7 @@ diff -ur mailman-2.1.9/bin/rmlist mailman-2.1.9-new/bin/rmlist
      if msg:
          print >> fd, msg
      sys.exit(code)
-@@ -69,15 +69,15 @@
+@@ -69,15 +69,15 @@ def usage(code, msg=''):
  
  def remove_it(listname, filename, msg):
      if os.path.islink(filename):
@@ -1686,7 +1842,7 @@ diff -ur mailman-2.1.9/bin/rmlist mailman-2.1.9-new/bin/rmlist
  
  
  
-@@ -101,13 +101,13 @@
+@@ -101,13 +101,13 @@ def main():
  
      if not Utils.list_exists(listname):
          if not removeArchives:
@@ -1703,7 +1859,7 @@ diff -ur mailman-2.1.9/bin/rmlist mailman-2.1.9-new/bin/rmlist
  
  
      REMOVABLES = []
-@@ -121,7 +121,7 @@
+@@ -121,7 +121,7 @@ def main():
              sys.modules[modname].remove(mlist)
  
          REMOVABLES = [
@@ -1712,7 +1868,7 @@ diff -ur mailman-2.1.9/bin/rmlist mailman-2.1.9-new/bin/rmlist
              ]
  
      # Remove any stale locks associated with the list
-@@ -129,18 +129,18 @@
+@@ -129,18 +129,18 @@ def main():
          fn_listname = filename.split('.')[0]
          if fn_listname == listname:
              REMOVABLES.append((os.path.join(mm_cfg.LOCK_DIR, filename),
@@ -1736,10 +1892,11 @@ diff -ur mailman-2.1.9/bin/rmlist mailman-2.1.9-new/bin/rmlist
              ])
  
      for dirtmpl, msg in REMOVABLES:
-diff -ur mailman-2.1.9/bin/show_qfiles mailman-2.1.9-new/bin/show_qfiles
---- mailman-2.1.9/bin/show_qfiles	2006-03-09 23:13:48.000000000 +0100
-+++ mailman-2.1.9-new/bin/show_qfiles	2007-01-29 14:29:46.000000000 +0100
-@@ -37,7 +37,7 @@
+diff --git a/bin/show_qfiles b/bin/show_qfiles
+index 0dbe9fe..686a652 100644
+--- a/bin/show_qfiles
++++ b/bin/show_qfiles
+@@ -37,7 +37,7 @@ import getopt
  from cPickle import load
  
  import paths
@@ -1748,7 +1905,7 @@ diff -ur mailman-2.1.9/bin/show_qfiles mailman-2.1.9-new/bin/show_qfiles
  
  try:
      True, False
-@@ -52,7 +52,7 @@
+@@ -52,7 +52,7 @@ def usage(code, msg=''):
          fd = sys.stderr
      else:
          fd = sys.stdout
@@ -1757,11 +1914,11 @@ diff -ur mailman-2.1.9/bin/show_qfiles mailman-2.1.9-new/bin/show_qfiles
      if msg:
          print >> fd, msg
      sys.exit(code)
-Nur in mailman-2.1.9-new/bin: show_qfiles.orig.
-diff -ur mailman-2.1.9/bin/sync_members mailman-2.1.9-new/bin/sync_members
---- mailman-2.1.9/bin/sync_members	2005-08-27 03:40:17.000000000 +0200
-+++ mailman-2.1.9-new/bin/sync_members	2007-01-29 14:29:46.000000000 +0100
-@@ -86,7 +86,7 @@
+diff --git a/bin/sync_members b/bin/sync_members
+index 13d0b2b..d302243 100755
+--- a/bin/sync_members
++++ b/bin/sync_members
+@@ -86,7 +86,7 @@ from Mailman import MailList
  from Mailman import Errors
  from Mailman import Utils
  from Mailman.UserDesc import UserDesc
@@ -1770,7 +1927,7 @@ diff -ur mailman-2.1.9/bin/sync_members mailman-2.1.9-new/bin/sync_members
  
  
  
-@@ -97,7 +97,7 @@
+@@ -97,7 +97,7 @@ def usage(code, msg=''):
          fd = sys.stderr
      else:
          fd = sys.stdout
@@ -1779,7 +1936,7 @@ diff -ur mailman-2.1.9/bin/sync_members mailman-2.1.9-new/bin/sync_members
      if msg:
          print >> fd, msg
      sys.exit(code)
-@@ -112,7 +112,7 @@
+@@ -112,7 +112,7 @@ def yesno(opt):
      elif yesno in ('n', 'no'):
          return 0
      else:
@@ -1788,7 +1945,7 @@ diff -ur mailman-2.1.9/bin/sync_members mailman-2.1.9-new/bin/sync_members
          # no return
  
  
-@@ -135,7 +135,7 @@
+@@ -135,7 +135,7 @@ def main():
          elif opt in ('-n', '--no-change'):
              dryrun = 1
              i += 1
@@ -1797,7 +1954,7 @@ diff -ur mailman-2.1.9/bin/sync_members mailman-2.1.9-new/bin/sync_members
          elif opt in ('-d', '--digest'):
              digest = 1
              i += 1
-@@ -156,11 +156,11 @@
+@@ -156,11 +156,11 @@ def main():
              i += 1
          elif opt in ('-f', '--file'):
              if filename is not None:
@@ -1811,7 +1968,7 @@ diff -ur mailman-2.1.9/bin/sync_members mailman-2.1.9-new/bin/sync_members
              i += 2
          elif opt in ('-a', '--notifyadmin'):
              notifyadmin = 1
-@@ -169,17 +169,17 @@
+@@ -169,17 +169,17 @@ def main():
              notifyadmin = yesno(opt)
              i += 1
          elif opt[0] == '-':
@@ -1832,7 +1989,7 @@ diff -ur mailman-2.1.9/bin/sync_members mailman-2.1.9-new/bin/sync_members
  
      # read the list of addresses to sync to from the file
      if filename == '-':
-@@ -188,7 +188,7 @@
+@@ -188,7 +188,7 @@ def main():
          try:
              fp = open(filename)
          except IOError, (code, msg):
@@ -1841,7 +1998,7 @@ diff -ur mailman-2.1.9/bin/sync_members mailman-2.1.9-new/bin/sync_members
          try:
              filemembers = fp.readlines()
          finally:
-@@ -200,7 +200,7 @@
+@@ -200,7 +200,7 @@ def main():
          addr = filemembers[i].strip()
          if addr == '' or addr[:1] == '#':
              del filemembers[i]
@@ -1850,7 +2007,7 @@ diff -ur mailman-2.1.9/bin/sync_members mailman-2.1.9-new/bin/sync_members
  
      # first filter out any invalid addresses
      filemembers = email.Utils.getaddresses(filemembers)
-@@ -209,17 +209,17 @@
+@@ -209,17 +209,17 @@ def main():
          try:
              Utils.ValidateEmail(addr)
          except Errors.EmailAddressError:
@@ -1871,7 +2028,7 @@ diff -ur mailman-2.1.9/bin/sync_members mailman-2.1.9-new/bin/sync_members
          sys.exit(1)
  
      try:
-@@ -241,7 +241,7 @@
+@@ -241,7 +241,7 @@ def main():
                  needsadding[laddr] = (name, addr)
  
          if not needsadding and not addrs:
@@ -1880,7 +2037,7 @@ diff -ur mailman-2.1.9/bin/sync_members mailman-2.1.9-new/bin/sync_members
              sys.exit(0)
  
          enc = sys.getdefaultencoding()
-@@ -257,7 +257,7 @@
+@@ -257,7 +257,7 @@ def main():
                  if not dryrun:
                      mlist.ApprovedAddMember(userdesc, welcome, notifyadmin)
                  s = email.Utils.formataddr((name, addr)).encode(enc, 'replace')
@@ -1888,8 +2045,8 @@ diff -ur mailman-2.1.9/bin/sync_members mailman-2.1.9-new/bin/sync_members
 +                print C_('Added  : %(s)s')
              except Errors.MMAlreadyAMember:
                  pass
- 
-@@ -275,7 +275,7 @@
+             except Errors.MembershipIsBanned, pattern:
+@@ -277,7 +277,7 @@ def main():
                      # get rid of this member's entry
                      mlist.removeMember(addr)
              s = email.Utils.formataddr((name, addr)).encode(enc, 'replace')
@@ -1898,10 +2055,11 @@ diff -ur mailman-2.1.9/bin/sync_members mailman-2.1.9-new/bin/sync_members
  
          mlist.Save()
      finally:
-diff -ur mailman-2.1.9/bin/transcheck mailman-2.1.9-new/bin/transcheck
---- mailman-2.1.9/bin/transcheck	2005-08-27 03:40:17.000000000 +0200
-+++ mailman-2.1.9-new/bin/transcheck	2007-01-29 14:29:46.000000000 +0100
-@@ -35,7 +35,7 @@
+diff --git a/bin/transcheck b/bin/transcheck
+index 1fb3301..e375316 100755
+--- a/bin/transcheck
++++ b/bin/transcheck
+@@ -36,7 +36,7 @@ import os
  import getopt
  
  import paths
@@ -1910,7 +2068,7 @@ diff -ur mailman-2.1.9/bin/transcheck mailman-2.1.9-new/bin/transcheck
  
  program = sys.argv[0]
  
-@@ -46,7 +46,7 @@
+@@ -47,7 +47,7 @@ def usage(code, msg=''):
          fd = sys.stderr
      else:
          fd = sys.stdout
@@ -1919,10 +2077,11 @@ diff -ur mailman-2.1.9/bin/transcheck mailman-2.1.9-new/bin/transcheck
      if msg:
          print >> fd, msg
      sys.exit(code)
-diff -ur mailman-2.1.9/bin/unshunt mailman-2.1.9-new/bin/unshunt
---- mailman-2.1.9/bin/unshunt	2006-07-22 03:53:41.000000000 +0200
-+++ mailman-2.1.9-new/bin/unshunt	2007-01-29 14:29:46.000000000 +0100
-@@ -36,7 +36,7 @@
+diff --git a/bin/unshunt b/bin/unshunt
+index 842cc0f..e17ecae 100644
+--- a/bin/unshunt
++++ b/bin/unshunt
+@@ -38,7 +38,7 @@ import getopt
  import paths
  from Mailman import mm_cfg
  from Mailman.Queue.sbcache import get_switchboard
@@ -1931,7 +2090,7 @@ diff -ur mailman-2.1.9/bin/unshunt mailman-2.1.9-new/bin/unshunt
  
  
  
-@@ -45,7 +45,7 @@
+@@ -47,7 +47,7 @@ def usage(code, msg=''):
          fd = sys.stderr
      else:
          fd = sys.stdout
@@ -1940,7 +2099,7 @@ diff -ur mailman-2.1.9/bin/unshunt mailman-2.1.9-new/bin/unshunt
      if msg:
          print >> fd, msg
      sys.exit(code)
-@@ -80,7 +80,7 @@
+@@ -82,7 +82,7 @@ def main():
          except Exception, e:
              # If there are any unshunting errors, log them and continue trying
              # other shunted messages.
@@ -1949,11 +2108,11 @@ diff -ur mailman-2.1.9/bin/unshunt mailman-2.1.9-new/bin/unshunt
                  'Cannot unshunt message %(filebase)s, skipping:\n%(e)s')
          else:
              # Unlink the .bak file left by dequeue()
-Nur in mailman-2.1.9-new/bin: unshunt.orig.
-diff -ur mailman-2.1.9/bin/update mailman-2.1.9-new/bin/update
---- mailman-2.1.9/bin/update	2005-08-27 03:40:17.000000000 +0200
-+++ mailman-2.1.9-new/bin/update	2007-01-29 14:29:46.000000000 +0100
-@@ -52,7 +52,7 @@
+diff --git a/bin/update b/bin/update
+index 343ae7a..b584342 100755
+--- a/bin/update
++++ b/bin/update
+@@ -52,7 +52,7 @@ from Mailman import MailList
  from Mailman import Message
  from Mailman import Pending
  from Mailman.LockFile import TimeOutError
@@ -1962,7 +2121,7 @@ diff -ur mailman-2.1.9/bin/update mailman-2.1.9-new/bin/update
  from Mailman.Queue.Switchboard import Switchboard
  from Mailman.OldStyleMemberships import OldStyleMemberships
  from Mailman.MemberAdaptor import BYBOUNCE, ENABLED
-@@ -104,7 +104,7 @@
+@@ -104,7 +104,7 @@ def make_varabs(relpath):
  
  def move_language_templates(mlist):
      listname = mlist.internal_name()
@@ -1971,7 +2130,7 @@ diff -ur mailman-2.1.9/bin/update mailman-2.1.9-new/bin/update
      # Mailman 2.1 has a new cascading search for its templates, defined and
      # described in Utils.py:maketext().  Putting templates in the top level
      # templates/ subdir or the lists/<listname> subdir is deprecated and no
-@@ -193,8 +193,8 @@
+@@ -193,8 +193,8 @@ def dolist(listname):
      try:
          mlist.Lock(0.5)
      except TimeOutError:
@@ -1982,7 +2141,7 @@ diff -ur mailman-2.1.9/bin/update mailman-2.1.9-new/bin/update
          return 1
  
      # Sanity check the invariant that every BYBOUNCE disabled member must have
-@@ -212,13 +212,13 @@
+@@ -212,13 +212,13 @@ def dolist(listname):
          # re-disable them if necessary.
          n = len(noinfo)
          if n > 0:
@@ -1998,7 +2157,7 @@ diff -ur mailman-2.1.9/bin/update mailman-2.1.9-new/bin/update
      mlist._UpdateRecords()
  
      mbox_dir = make_varabs('archives/private/%s.mbox' % (listname))
-@@ -240,7 +240,7 @@
+@@ -240,7 +240,7 @@ def dolist(listname):
      else:
          # this shouldn't happen, but hey, just in case
          if not os.path.isdir(mbox_dir):
@@ -2007,7 +2166,7 @@ diff -ur mailman-2.1.9/bin/update mailman-2.1.9-new/bin/update
  For some reason, %(mbox_dir)s exists as a file.  This won't work with
  b6, so I'm renaming it to %(mbox_dir)s.tmp and proceeding.""")
              os.rename(mbox_dir, "%s.tmp" % (mbox_dir))
-@@ -252,7 +252,7 @@
+@@ -252,7 +252,7 @@ b6, so I'm renaming it to %(mbox_dir)s.tmp and proceeding.""")
      # private one existing
      if os.path.isfile(o_pri_mbox_file) and os.path.isfile(o_pub_mbox_file):
          if mlist.archive_private:
@@ -2016,7 +2175,7 @@ diff -ur mailman-2.1.9/bin/update mailman-2.1.9-new/bin/update
  
  %(listname)s has both public and private mbox archives.  Since this list
  currently uses private archiving, I'm installing the private mbox archive
-@@ -267,7 +267,7 @@
+@@ -267,7 +267,7 @@ script.
          o_pub_mbox_file)
              os.rename(o_pub_mbox_file, "%s.preb6" % (o_pub_mbox_file))
          else:
@@ -2025,7 +2184,7 @@ diff -ur mailman-2.1.9/bin/update mailman-2.1.9-new/bin/update
  %s has both public and private mbox archives.  Since this list
  currently uses public archiving, I'm installing the public mbox file
  archive file (%s) as the active one, and renaming
-@@ -284,7 +284,7 @@
+@@ -284,7 +284,7 @@ script.
      # move private archive mbox there if it's around
      # and take into account all sorts of absurdities
      #
@@ -2034,7 +2193,7 @@ diff -ur mailman-2.1.9/bin/update mailman-2.1.9-new/bin/update
      if os.path.exists(o_pri_mbox_file):
          if os.path.isfile(o_pri_mbox_file):
              os.rename(o_pri_mbox_file, mbox_file)
-@@ -292,14 +292,14 @@
+@@ -292,21 +292,21 @@ script.
              newname = "%s.mm_install-dunno_what_this_was_but_its_in_the_way" \
                        % o_pri_mbox_file
              os.rename(o_pri_mbox_file, newname)
@@ -2046,12 +2205,11 @@ diff -ur mailman-2.1.9/bin/update mailman-2.1.9-new/bin/update
          %(newname)s""")
          else:
              # directory
--            print _("""\
-+            print C_("""\
-     looks like you have a really recent CVS installation...
-     you're either one brave soul, or you already ran me""")
+-            print _('Nothing to do.')
++            print C_('Nothing to do.')
+ 
  
-@@ -308,7 +308,7 @@
+     #
      # move public archive mbox there if it's around
      # and take into account all sorts of absurdities.
      #
@@ -2060,7 +2218,7 @@ diff -ur mailman-2.1.9/bin/update mailman-2.1.9-new/bin/update
      if os.path.exists(o_pub_mbox_file):
          if os.path.isfile(o_pub_mbox_file):
              os.rename(o_pub_mbox_file, mbox_file)
-@@ -316,13 +316,13 @@
+@@ -314,13 +314,13 @@ script.
              newname = "%s.mm_install-dunno_what_this_was_but_its_in_the_way" \
                        % o_pub_mbox_file
              os.rename(o_pub_mbox_file, newname)
@@ -2071,37 +2229,37 @@ diff -ur mailman-2.1.9/bin/update mailman-2.1.9-new/bin/update
      to
          %(newname)s""")
          else: # directory
+-            print _('Nothing to do.')
++            print C_('Nothing to do.')
+ 
+     #
+     # move the html archives there
+@@ -350,7 +350,7 @@ script.
+         b4_tmpl_dir = os.path.join(tmpl_dir, mlist._internal_name)
+         new_tmpl_dir = os.path.join(list_dir, mlist._internal_name)
+         if os.path.exists(b4_tmpl_dir):
 -            print _("""\
 +            print C_("""\
-     looks like you have a really recent CVS installation...
-     you're either one brave soul, or you already ran me""")
- 
-@@ -347,7 +347,7 @@
-     b4_tmpl_dir = os.path.join(tmpl_dir, mlist._internal_name)
-     new_tmpl_dir = os.path.join(list_dir, mlist._internal_name)
-     if os.path.exists(b4_tmpl_dir):
--        print _("""\
-+        print C_("""\
  - This list looks like it might have <= b4 list templates around""")
-         for f in os.listdir(b4_tmpl_dir):
-             o_tmpl = os.path.join(b4_tmpl_dir, f)
-@@ -355,12 +355,12 @@
-             if os.path.exists(o_tmpl):
-                 if not os.path.exists(n_tmpl):
-                     os.rename(o_tmpl, n_tmpl)
--                    print _('- moved %(o_tmpl)s to %(n_tmpl)s')
-+                    print C_('- moved %(o_tmpl)s to %(n_tmpl)s')
+             for f in os.listdir(b4_tmpl_dir):
+                 o_tmpl = os.path.join(b4_tmpl_dir, f)
+@@ -358,12 +358,12 @@ script.
+                 if os.path.exists(o_tmpl):
+                     if not os.path.exists(n_tmpl):
+                         os.rename(o_tmpl, n_tmpl)
+-                        print _('- moved %(o_tmpl)s to %(n_tmpl)s')
++                        print C_('- moved %(o_tmpl)s to %(n_tmpl)s')
+                     else:
+-                        print _("""\
++                        print C_("""\
+ - both %(o_tmpl)s and %(n_tmpl)s exist, leaving untouched""")
                  else:
 -                    print _("""\
 +                    print C_("""\
- - both %(o_tmpl)s and %(n_tmpl)s exist, leaving untouched""")
-             else:
--                print _("""\
-+                print C_("""\
  - %(o_tmpl)s doesn't exist, leaving untouched""")
      #
      # Move all the templates to the en language subdirectory as required for
-@@ -390,23 +390,23 @@
+@@ -393,23 +393,23 @@ def remove_old_sources(module):
      src = '%s/%s' % (mm_cfg.PREFIX, module)
      pyc = src + "c"
      if os.path.isdir(src):
@@ -2130,7 +2288,7 @@ diff -ur mailman-2.1.9/bin/update mailman-2.1.9-new/bin/update
      prefix = `time.time()` + '+'
      # Be sure the qfiles/in directory exists (we don't really need the
      # switchboard object, but it's convenient for creating the directory).
-@@ -514,7 +514,7 @@
+@@ -527,7 +527,7 @@ def dequeue(filebase):
                  # This message was unparsable, most likely because its
                  # MIME encapsulation was broken.  For now, there's not
                  # much we can do about it.
@@ -2139,7 +2297,7 @@ diff -ur mailman-2.1.9/bin/update mailman-2.1.9-new/bin/update
                  msgfp.close()
                  msgfp = None
                  if mm_cfg.QRUNNER_SAVE_BAD_MESSAGES:
-@@ -547,7 +547,7 @@
+@@ -560,7 +560,7 @@ def update_pending():
      except IOError, e:
          if e.errno <> errno.ENOENT: raise
      else:
@@ -2148,7 +2306,7 @@ diff -ur mailman-2.1.9/bin/update mailman-2.1.9-new/bin/update
          db = marshal.load(fp)
          # Convert to the pre-Mailman 2.1.5 format
          db = Pending._update(db)
-@@ -558,10 +558,10 @@
+@@ -571,10 +571,10 @@ def update_pending():
          except IOError, e:
              if e.errno <> errno.ENOENT: raise
          else:
@@ -2161,7 +2319,7 @@ diff -ur mailman-2.1.9/bin/update mailman-2.1.9-new/bin/update
          return
      # Now upgrade the database to the 2.1.5 format.  Each list now has its own
      # pending.pck file, but only the RE_ENABLE operation actually recorded the
-@@ -582,7 +582,7 @@
+@@ -595,7 +595,7 @@ def update_pending():
              op = val[0]
              data = val[1:]
          except (IndexError, ValueError):
@@ -2170,7 +2328,7 @@ diff -ur mailman-2.1.9/bin/update mailman-2.1.9-new/bin/update
              continue
          if op in (Pending.UNSUBSCRIPTION, Pending.CHANGE_OF_ADDRESS):
              # data[0] is the address being unsubscribed
-@@ -598,7 +598,7 @@
+@@ -611,7 +611,7 @@ def update_pending():
              # data[0] is the hold id.  There better only be one entry per id
              id = data[0]
              if holds_by_id.has_key(id):
@@ -2179,7 +2337,7 @@ diff -ur mailman-2.1.9/bin/update mailman-2.1.9-new/bin/update
              else:
                  holds_by_id[id] = (key, val)
      # Now we have to lock every list and re-pend all the appropriate
-@@ -651,7 +651,7 @@
+@@ -664,7 +664,7 @@ def update_pending():
  def main():
      errors = 0
      # get rid of old stuff
@@ -2188,7 +2346,7 @@ diff -ur mailman-2.1.9/bin/update mailman-2.1.9-new/bin/update
      for mod in ('Mailman/Archiver.py', 'Mailman/HyperArch.py',
                  'Mailman/HyperDatabase.py', 'Mailman/pipermail.py',
                  'Mailman/smtplib.py', 'Mailman/Cookie.py',
-@@ -661,29 +661,29 @@
+@@ -674,29 +674,29 @@ def main():
          remove_old_sources(mod)
      listnames = Utils.list_names()
      if not listnames:
@@ -2224,7 +2382,7 @@ diff -ur mailman-2.1.9/bin/update mailman-2.1.9-new/bin/update
      else:
          d = marshal.load(fp)
          fp.close()
-@@ -695,7 +695,7 @@
+@@ -708,7 +708,7 @@ If your archives are big, this could take a minute or two...""")
              try:
                  mlist.Lock(0.5)
              except TimeOutError:
@@ -2233,7 +2391,7 @@ diff -ur mailman-2.1.9/bin/update mailman-2.1.9-new/bin/update
                      'WARNING: could not acquire lock for list: %(listname)s')
                  errors = errors + 1
              else:
-@@ -706,7 +706,7 @@
+@@ -719,7 +719,7 @@ If your archives are big, this could take a minute or two...""")
                  mlist.Save()
                  mlist.Unlock()
          os.unlink(wmfile)
@@ -2242,7 +2400,7 @@ diff -ur mailman-2.1.9/bin/update mailman-2.1.9-new/bin/update
      # In Mailman 2.1, the pending database format and file name changed, but
      # in Mailman 2.1.5 it changed again.  This should update all existing
      # files to the 2.1.5 format.
-@@ -720,7 +720,7 @@
+@@ -733,7 +733,7 @@ If your archives are big, this could take a minute or two...""")
      # There's no good way of figuring this out for releases prior to 2.0beta2
      # :(
      if lastversion == NOTFRESH:
@@ -2251,7 +2409,7 @@ diff -ur mailman-2.1.9/bin/update mailman-2.1.9-new/bin/update
  
  NOTE NOTE NOTE NOTE NOTE
  
-@@ -747,7 +747,7 @@
+@@ -760,7 +760,7 @@ def usage(code, msg=''):
          fd = sys.stderr
      else:
          fd = sys.stdout
@@ -2260,7 +2418,7 @@ diff -ur mailman-2.1.9/bin/update mailman-2.1.9-new/bin/update
      if msg:
          print >> sys.stderr, msg
      sys.exit(code)
-@@ -777,15 +777,15 @@
+@@ -790,15 +790,15 @@ if __name__ == '__main__':
      hextversion = hex(thisversion)
      if lastversion == thisversion and not force:
          # nothing to do
@@ -2279,7 +2437,7 @@ diff -ur mailman-2.1.9/bin/update mailman-2.1.9-new/bin/update
      errors = main()
      if not errors:
          # Record the version we just upgraded to
-@@ -794,7 +794,7 @@
+@@ -807,7 +807,7 @@ Exiting.""")
          fp.close()
      else:
          lockdir = mm_cfg.LOCK_DIR
@@ -2288,10 +2446,10 @@ diff -ur mailman-2.1.9/bin/update mailman-2.1.9-new/bin/update
  
  ERROR:
  
-Nur in mailman-2.1.9-new/bin: update.orig.
-diff -ur mailman-2.1.9/bin/version mailman-2.1.9-new/bin/version
---- mailman-2.1.9/bin/version	2005-08-27 03:40:17.000000000 +0200
-+++ mailman-2.1.9-new/bin/version	2007-01-29 14:29:46.000000000 +0100
+diff --git a/bin/version b/bin/version
+index 72c50b8..4efba6f 100644
+--- a/bin/version
++++ b/bin/version
 @@ -21,6 +21,6 @@
  
  import paths
@@ -2301,10 +2459,11 @@ diff -ur mailman-2.1.9/bin/version mailman-2.1.9-new/bin/version
  
 -print _('Using Mailman version:'), Mailman.mm_cfg.VERSION
 +print C_('Using Mailman version:'), Mailman.mm_cfg.VERSION
-diff -ur mailman-2.1.9/bin/withlist mailman-2.1.9-new/bin/withlist
---- mailman-2.1.9/bin/withlist	2005-08-27 03:40:17.000000000 +0200
-+++ mailman-2.1.9-new/bin/withlist	2007-01-29 14:34:01.000000000 +0100
-@@ -153,7 +153,7 @@
+diff --git a/bin/withlist b/bin/withlist
+index 6cda8db..0e0340b 100644
+--- a/bin/withlist
++++ b/bin/withlist
+@@ -157,7 +157,7 @@ def usage(code, msg=''):
          fd = sys.stderr
      else:
          fd = sys.stdout
@@ -2313,7 +2472,7 @@ diff -ur mailman-2.1.9/bin/withlist mailman-2.1.9-new/bin/withlist
      if msg:
          print >> fd, msg
      sys.exit(code)
-@@ -171,11 +171,11 @@
+@@ -175,11 +175,11 @@ def atexit():
      if m.Locked():
          if VERBOSE:
              listname = m.internal_name()
@@ -2327,7 +2486,7 @@ diff -ur mailman-2.1.9/bin/withlist mailman-2.1.9-new/bin/withlist
      del m
  
  
-@@ -184,16 +184,16 @@
+@@ -188,16 +188,16 @@ def do_list(listname, args, func):
      global m
      # first try to open mailing list
      if VERBOSE:
@@ -2348,7 +2507,7 @@ diff -ur mailman-2.1.9/bin/withlist mailman-2.1.9-new/bin/withlist
          m = None
  
      # try to import the module and run the callable
-@@ -233,7 +233,7 @@
+@@ -237,7 +237,7 @@ def main():
              all = True
  
      if len(args) < 1 and not all:
@@ -2357,7 +2516,7 @@ diff -ur mailman-2.1.9/bin/withlist mailman-2.1.9-new/bin/withlist
          if interact:
              # Let them keep going
              print warning
-@@ -242,7 +242,7 @@
+@@ -246,7 +246,7 @@ def main():
              usage(1, warning)
  
      if all and not run:
@@ -2366,179 +2525,26 @@ diff -ur mailman-2.1.9/bin/withlist mailman-2.1.9-new/bin/withlist
  
      # The default for interact is 1 unless -r was given
      if interact is None:
-@@ -262,10 +262,10 @@
+@@ -266,11 +266,11 @@ def main():
              module = run[:i]
              callable = run[i+1:]
          if VERBOSE:
 -            print >> sys.stderr, _('Importing %(module)s...')
 +            print >> sys.stderr, C_('Importing %(module)s...')
-         mod = __import__(module)
+         __import__(module)
+         mod = sys.modules[module]
          if VERBOSE:
 -            print >> sys.stderr, _('Running %(module)s.%(callable)s()...')
 +            print >> sys.stderr, C_('Running %(module)s.%(callable)s()...')
          func = getattr(mod, callable)
  
      if all:
-diff -ur mailman-2.1.9/Mailman/i18n.py mailman-2.1.9-new/Mailman/i18n.py
---- mailman-2.1.9/Mailman/i18n.py	2006-02-23 07:25:29.000000000 +0100
-+++ mailman-2.1.9-new/Mailman/i18n.py	2007-01-29 14:29:45.000000000 +0100
-@@ -15,6 +15,7 @@
- # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
- # USA.
- 
-+import locale
- import sys
- import time
- import gettext
-@@ -25,6 +26,15 @@
- 
- _translation = None
- 
-+
-+def _get_ctype_charset():
-+    old = locale.setlocale(locale.LC_CTYPE, '')
-+    charset = locale.nl_langinfo(locale.CODESET)
-+    locale.setlocale(locale.LC_CTYPE, old)
-+    return charset
-+
-+_ctype_charset = _get_ctype_charset()
-+
- 
- 
- def set_language(language=None):
-@@ -54,7 +64,7 @@
- 
- 
- 
--def _(s):
-+def _(s, frame = 1):
-     if s == '':
-         return s
-     assert s
-@@ -70,7 +80,7 @@
-     # original string is 1) locals dictionary, 2) globals dictionary.
-     #
-     # First, get the frame of the caller
--    frame = sys._getframe(1)
-+    frame = sys._getframe(frame)
-     # A `safe' dictionary is used so we won't get an exception if there's a
-     # missing key in the dictionary.
-     dict = SafeDict(frame.f_globals.copy())
-@@ -91,6 +101,19 @@
- 
- 
- 
-+def tolocale(s):
-+    global _ctype_charset
-+    if isinstance(s, UnicodeType):
-+        return s
-+    source = _translation.charset ()
-+    if not source:
-+        return s
-+    return unicode(s, source, 'replace').encode(_ctype_charset, 'replace')
-+
-+def C_(s):
-+    return tolocale(_(s, 2))
-+    
-+
- def ctime(date):
-     # Don't make these module globals since we have to do runtime translation
-     # of the strings anyway.
-Nur in mailman-2.1.9-new/Mailman: i18n.py.orig.
-Nur in mailman-2.1.9-new/Mailman/Logging: Makefile.
-Nur in mailman-2.1.9-new/Mailman: Makefile.
-Nur in mailman-2.1.9-new/Mailman: mm_cfg.py.dist.
-Nur in mailman-2.1.9-new/Mailman/MTA: Makefile.
-diff -ur mailman-2.1.9/Mailman/MTA/Manual.py mailman-2.1.9-new/Mailman/MTA/Manual.py
---- mailman-2.1.9/Mailman/MTA/Manual.py	2005-12-30 19:50:08.000000000 +0100
-+++ mailman-2.1.9-new/Mailman/MTA/Manual.py	2007-01-29 14:29:45.000000000 +0100
-@@ -25,7 +25,7 @@
- from Mailman import Message
- from Mailman import Utils
- from Mailman.Queue.sbcache import get_switchboard
--from Mailman.i18n import _
-+from Mailman.i18n import _, C_
- from Mailman.MTA.Utils import makealiases
- 
- try:
-@@ -74,12 +74,12 @@
-         outfp = sfp
-     else:
-         if not quiet:
--            print _("""\
-+            print C_("""\
- To finish creating your mailing list, you must edit your /etc/aliases (or
- equivalent) file by adding the following lines, and possibly running the
- `newaliases' program:
- """)
--        print _("""\
-+        print C_("""\
- ## %(listname)s mailing list""")
-         outfp = sys.stdout
-     # Common path
-@@ -120,7 +120,7 @@
- """)
-         outfp = sfp
-     else:
--        print _("""
-+        print C_("""
- To finish removing your mailing list, you must edit your /etc/aliases (or
- equivalent) file by removing the following lines, and possibly running the
- `newaliases' program:
-Nur in mailman-2.1.9-new/Mailman/MTA: Manual.py.orig.
-diff -ur mailman-2.1.9/Mailman/MTA/Postfix.py mailman-2.1.9-new/Mailman/MTA/Postfix.py
---- mailman-2.1.9/Mailman/MTA/Postfix.py	2007-01-29 14:37:43.000000000 +0100
-+++ mailman-2.1.9-new/Mailman/MTA/Postfix.py	2007-01-29 14:35:09.000000000 +0100
-@@ -27,7 +27,7 @@
- from Mailman import mm_cfg
- from Mailman import Utils
- from Mailman import LockFile
--from Mailman.i18n import _
-+from Mailman.i18n import C_
- from Mailman.MTA.Utils import makealiases
- from Mailman.Logging.Syslog import syslog
- 
-@@ -303,7 +303,7 @@
-     targetmode = S_IFREG | S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP
-     for file in ALIASFILE, VIRTFILE:
-         if state.VERBOSE:
--            print _('checking permissions on %(file)s')
-+            print C_('checking permissions on %(file)s')
-         stat = None
-         try:
-             stat = os.stat(file)
-@@ -313,9 +313,9 @@
-         if stat and (stat[ST_MODE] & targetmode) <> targetmode:
-             state.ERRORS += 1
-             octmode = oct(stat[ST_MODE])
--            print _('%(file)s permissions must be 066x (got %(octmode)s)'),
-+            print C_('%(file)s permissions must be 066x (got %(octmode)s)'),
-             if state.FIX:
--                print _('(fixing)')
-+                print C_('(fixing)')
-                 os.chmod(file, stat[ST_MODE] | targetmode)
-             else:
-                 print
-@@ -331,7 +331,7 @@
-                 raise
-             continue
-         if state.VERBOSE:
--            print _('checking ownership of %(dbfile)s')
-+            print C_('checking ownership of %(dbfile)s')
-         user = mm_cfg.MAILMAN_USER
-         ownerok = stat[ST_UID] == pwd.getpwnam(user)[2]
-         if not ownerok:
-@@ -339,10 +339,10 @@
-                 owner = pwd.getpwuid(stat[ST_UID])[0]
-             except KeyError:
-                 owner = 'uid %d' % stat[ST_UID]
--            print _('%(dbfile)s owned by %(owner)s (must be owned by %(user)s'),
-+            print C_('%(dbfile)s owned by %(owner)s (must be owned by %(user)s'),
-             state.ERRORS += 1
-             if state.FIX:
--                print _('(fixing)')
-+                print C_('(fixing)')
-                 uid = pwd.getpwnam(user)[2]
-                 gid = grp.getgrnam(mm_cfg.MAILMAN_GROUP)[2]
-                 os.chown(dbfile, uid, gid)
-
+@@ -291,7 +291,7 @@ def main():
+         namespace = globals().copy()
+         namespace.update(locals())
+         if dolist:
+-            ban = _("The variable `m' is the %(listname)s MailList instance")
++            ban = C_("The variable `m' is the %(listname)s MailList instance")
+         else:
+             ban = None
+         code.InteractiveConsole(namespace).interact(ban)
diff --git a/mailman.spec b/mailman.spec
index ed006c1..0a5b0b2 100644
--- a/mailman.spec
+++ b/mailman.spec
@@ -1,7 +1,7 @@
 Summary: Mailing list manager with built in Web access
 Name: mailman
 Version: 2.1.14
-Release: 5%{?dist}
+Release: 6%{?dist}
 Epoch: 3
 Group: Applications/Internet
 Source0: ftp://ftp.gnu.org/pub/gnu/mailman/mailman-%{version}.tgz
@@ -22,7 +22,7 @@ Patch4: mailman-2.1.11-cron.patch
 Patch5: mailman-2.1.13-FHS.patch
 Patch6: mailman-python-compile.patch
 Patch7: mailman-2.1.13-archive-reply.patch
-#Patch8: mailman-2.1.11-lctype.patch
+Patch8: mailman-2.1.9-LC_CTYPE.patch
 Patch9: mailman-2.1.9-ctypo-new.patch
 Patch10: mailman-2.1.10-ctypefix.patch
 Patch11: mailman-2.1.9-header-folding.patch
@@ -109,7 +109,7 @@ additional installation steps, these are described in:
 
 %prep
 #not needed anymore
-#%%define _default_patch_fuzz 3
+#%define _default_patch_fuzz 3
 
 %setup -q
 %patch1 -p1 -b .multimail
@@ -119,14 +119,13 @@ additional installation steps, these are described in:
 %patch5 -p1 -b .FHS
 %patch6 -p1 -b .python-compile
 %patch7 -p1 -b .archive-in-reply-to
-#%%patch8 -p1 -b .lctype
+%patch8 -p1 -b .lctype
 %patch9 -p1 -b .ctypo
 %patch10 -p1 -b .ctypefix
 #!%%patch11 -p1 -b .header
 %patch12 -p1 -b .selinux
 %patch13 -p1 -b .unicode
 %patch14 -p1 -b .fhsinit
-%patch15 -p1 -b .lctype
 %patch16 -p1 -b .privurl
 %patch17 -p1 -b .mmcfg
 %patch18 -p1 -b .initcleanup
@@ -514,10 +513,14 @@ exit 0
 %attr(0644,root,%{mmgroup}) %config(noreplace) %{mmdir}/cron/crontab.in
 %attr(0755,root,root) %{_bindir}/mailman-update-cfg
 # fix for security issue #459530
-%attr(2770,%{mmuser},%{cgigroup}) %{archivesdir}/private
+%attr(2770,%{cgiuser},%{mmgroup}) %{archivesdir}/private
 
 %changelog
-* Wed Feb 23 2011 Jan Kaluza <jkaluza at redhat.com> - 3:2.1.14-4
+* Tue Apr 05 2011 Jan Kaluza <jkaluza at redhat.com> - 3:2.1.14-6
+- fix #688435 - set proper permissions for private archive
+- fix badly rebased LC_CTYPE patch which caused newlist to fail with traceback
+
+* Wed Feb 23 2011 Jan Kaluza <jkaluza at redhat.com> - 3:2.1.14-5
 - fix #679644 - fixed CVE-2011-0707: three XSS flaws due improper
   escaping of the full name of the member
 


More information about the scm-commits mailing list