[Pkg-mailman-hackers] Pkg-mailman commit - rev 530 - in trunk/debian: . patches

Thijs Kinkhorst thijs at alioth.debian.org
Fri Feb 8 23:02:53 UTC 2008


Author: thijs
Date: 2008-02-08 23:02:53 +0000 (Fri, 08 Feb 2008)
New Revision: 530

Removed:
   trunk/debian/patches/56_fix_de_broken_links.patch
   trunk/debian/patches/81_backport_export.dpatch
Modified:
   trunk/debian/changelog
   trunk/debian/patches/53_disable_addons.patch
   trunk/debian/patches/70_invalid_utf8_dos.patch
   trunk/debian/patches/series
   trunk/debian/rules
Log:
* New upstream beta release.
  + Restricts XSS by list admins, CVE-2008-0564.
  + Obsoletes 56_fix_de_broken_links.patch.
  + Obsoletes 81_backport_export.dpatch.
  + Makes list handling case sensitivity consistent (closes: #446257).
  + Archives do not drop headerless mime parts (Closes: #450399).
  + check_perms checks more perms (Closes: #260224).


Modified: trunk/debian/changelog
===================================================================
--- trunk/debian/changelog	2008-01-14 11:37:36 UTC (rev 529)
+++ trunk/debian/changelog	2008-02-08 23:02:53 UTC (rev 530)
@@ -1,3 +1,15 @@
+mailman (1:2.1.10~b3-1) unstable; urgency=low
+
+  * New upstream beta release.
+    + Restricts XSS by list admins, CVE-2008-0564.
+    + Obsoletes 56_fix_de_broken_links.patch.
+    + Obsoletes 81_backport_export.dpatch.
+    + Makes list handling case sensitivity consistent (closes: #446257).
+    + Archives do not drop headerless mime parts (Closes: #450399).
+    + check_perms checks more perms (Closes: #260224).
+
+ -- Thijs Kinkhorst <thijs at debian.org>  Fri, 08 Feb 2008 23:55:06 +0100
+
 mailman (1:2.1.9-10) unstable; urgency=low
 
   * Be quiet when logrotation succeeds, prevents Cron spam (closes: #456954).

Modified: trunk/debian/patches/53_disable_addons.patch
===================================================================
--- trunk/debian/patches/53_disable_addons.patch	2008-01-14 11:37:36 UTC (rev 529)
+++ trunk/debian/patches/53_disable_addons.patch	2008-02-08 23:02:53 UTC (rev 530)
@@ -1,10 +1,9 @@
 Patch: 53_disable_addons.patch
 Author: Tollef Fog Heen <tfheen at debian.org>
 Disable some modules which are pulled in from other Debian packages.
-Index: misc/Makefile.in
-===================================================================
---- misc/Makefile.in.orig	2006-08-15 15:12:18.000000000 +0800
-+++ misc/Makefile.in	2006-08-15 15:14:39.000000000 +0800
+diff -Nur misc/Makefile.in mailman-2.1.10b3/misc/Makefile.in
+--- misc/Makefile.in	2008-02-02 23:29:26.000000000 +0100
++++ misc/Makefile.in	2008-02-08 23:19:31.000000000 +0100
 @@ -57,7 +57,10 @@
  JACODECSPKG=	JapaneseCodecs-1.4.11
  KOCODECSPKG=	KoreanCodecs-2.0.5
@@ -17,29 +16,29 @@
  
  # Modes for directories and executables created by the install
  # process.  Default to group-writable directories but
-Index: misc/paths.py.in
-===================================================================
---- misc/paths.py.in.orig	2006-08-15 15:12:18.000000000 +0800
-+++ misc/paths.py.in	2006-08-15 15:14:39.000000000 +0800
-@@ -53,12 +53,18 @@
- # In a normal interactive Python environment, the japanese.pth and korean.pth
+diff -Nur misc/paths.py.in mailman-2.1.10b3/misc/paths.py.in
+--- misc/paths.py.in	2008-02-02 23:29:26.000000000 +0100
++++ misc/paths.py.in	2008-02-08 23:21:01.000000000 +0100
+@@ -71,13 +71,19 @@
  # files would be imported automatically.  But because we inhibit the importing
  # of the site module, we need to be explicit about importing these codecs.
--import japanese
-+try:
-+    import japanese
-+except ImportError:
-+    pass
+ if not jaok:
+-    import japanese
++    try:
++        import japanese
++    except ImportError:
++        pass
  # As of KoreanCodecs 2.0.5, you had to do the second import to get the Korean
  # codecs installed, however leave the first import in there in case an upgrade
  # changes this.
--import korean
--import korean.aliases
-+try:
-+    import korean
-+    import korean.aliases
-+except ImportError:
-+    pass
+ if not kook:
+-    import korean
+-    import korean.aliases
++    try:
++        import korean
++        import korean.aliases
++    except ImportError:
++        pass
  # Arabic and Hebrew (RFC-1556) encoding aliases. (temporary solution)
  import encodings.aliases
  encodings.aliases.aliases.update({

Deleted: trunk/debian/patches/56_fix_de_broken_links.patch
===================================================================
--- trunk/debian/patches/56_fix_de_broken_links.patch	2008-01-14 11:37:36 UTC (rev 529)
+++ trunk/debian/patches/56_fix_de_broken_links.patch	2008-02-08 23:02:53 UTC (rev 530)
@@ -1,25 +0,0 @@
-Patch: 56_fix_de_broken_links.patch
-Author: based on work by Ralf Doeblitz <r.doeblitz at asco.de> (see bug #233048)
-Submitted upstream: via email to translation maintainer
-Index: messages/de/LC_MESSAGES/mailman.po
-===================================================================
---- messages/de/LC_MESSAGES/mailman.po.orig	2006-08-15 15:12:18.000000000 +0800
-+++ messages/de/LC_MESSAGES/mailman.po	2006-08-15 15:14:40.000000000 +0800
-@@ -7201,7 +7201,7 @@
- "\">topics_bodylines_limit</a>\n"
- "             configuration variable."
- msgstr ""
--"Der Themenfilter kategorisiert jede eingehende e-Mailnachricht gemäss href="
-+"Der Themenfilter kategorisiert jede eingehende e-Mailnachricht gemäss <a href="
- "\"http://www.python.org/doc/current/lib/module-re.html\">Filterregeln mit "
- "regulären Ausdrücken</a>, die Sie weiter unten festlegen können. Wenn die "
- "<code>Subject:</code> oder <code>Keywords:</code> Header der Nachricht mit "
-@@ -7214,7 +7214,7 @@
- "nicht mit Sammelnachrichten.\n"
- " <p>Optional kann auch der Nachrichtentext auf Vorkommen von <code>Subject:</"
- "code> und <code>Keyword:</code> Header durchsucht werden. Spezifizieren Sie "
--"hierzu die Optionhref=\"?VARHELP=topics/topics_bodylines_limit"
-+"hierzu die Option <a href=\"?VARHELP=topics/topics_bodylines_limit"
- "\">topics_bodylines_limit</a>."
- 
- # Mailman/Gui/Topics.py:57

Modified: trunk/debian/patches/70_invalid_utf8_dos.patch
===================================================================
--- trunk/debian/patches/70_invalid_utf8_dos.patch	2008-01-14 11:37:36 UTC (rev 529)
+++ trunk/debian/patches/70_invalid_utf8_dos.patch	2008-02-08 23:02:53 UTC (rev 530)
@@ -1,14 +1,13 @@
 Patch: 70_invalid_utf8_dos.patch
 Author: Lionel Elie Mamane <lionel at mamane.lu>
 Avoid DOS if attachement filename is invalid Unicode string
-Index: Mailman/Handlers/Scrubber.py
-===================================================================
---- Mailman/Handlers/Scrubber.py.orig	2006-08-15 15:14:15.000000000 +0800
-+++ Mailman/Handlers/Scrubber.py	2006-08-15 15:14:54.000000000 +0800
-@@ -302,7 +302,10 @@
-             finally:
+diff -Nur Mailman/Handlers/Scrubber.py mailman-2.1.10b3/Mailman/Handlers/Scrubber.py
+--- Mailman/Handlers/Scrubber.py	2008-02-02 23:29:26.000000000 +0100
++++ Mailman/Handlers/Scrubber.py	2008-02-08 23:33:16.000000000 +0100
+@@ -317,7 +317,10 @@
                  os.umask(omask)
              desc = part.get('content-description', _('not available'))
+             desc = Utils.oneline(desc, lcset)
 -            filename = part.get_filename(_('not available'))
 +            try:
 +                filename = part.get_filename(_('not available'))
@@ -17,7 +16,7 @@
              filename = Utils.oneline(filename, lcset)
              replace_payload_by_text(part, _("""\
  A non-text attachment was scrubbed...
-@@ -412,7 +415,10 @@
+@@ -439,7 +442,10 @@
      ctype = msg.get_content_type()
      # i18n file name is encoded
      lcset = Utils.GetCharSet(mlist.preferred_language)
@@ -26,18 +25,6 @@
 +        filename = Utils.oneline(msg.get_filename(''), lcset)
 +    except UnicodeDecodeError:
 +        filename = ''
-     fnext = os.path.splitext(filename)[1]
+     filename, fnext = os.path.splitext(filename)
      # For safety, we should confirm this is valid ext for content-type
      # but we can use fnext if we introduce fnext filtering
-@@ -438,7 +444,10 @@
-     try:
-         # Now base the filename on what's in the attachment, uniquifying it if
-         # necessary.
--        filename = msg.get_filename()
-+        try:
-+            filename = msg.get_filename()
-+        except UnicodeDecodeError:
-+            filename = None
-         if not filename or mm_cfg.SCRUBBER_DONT_USE_ATTACHMENT_FILENAME:
-             filebase = 'attachment'
-         else:

Deleted: trunk/debian/patches/81_backport_export.dpatch
===================================================================
--- trunk/debian/patches/81_backport_export.dpatch	2008-01-14 11:37:36 UTC (rev 529)
+++ trunk/debian/patches/81_backport_export.dpatch	2008-02-08 23:02:53 UTC (rev 530)
@@ -1,438 +0,0 @@
-#! /bin/sh /usr/share/dpatch/dpatch-run
-## 81_backport_export.dpatch by  <lmamane at debian.org>
-##
-## All lines beginning with `## DP:' are a description of the patch.
-## DP: Backport bin/export from upstream SVN so that we can
-## DP: have automatic upgrades to lenny.
-
- at DPATCH@
-diff -urNad mailman-2.1.9~/bin/Makefile.in mailman-2.1.9/bin/Makefile.in
---- mailman-2.1.9~/bin/Makefile.in	2005-08-27 03:40:17.000000000 +0200
-+++ mailman-2.1.9/bin/Makefile.in	2007-01-20 04:56:07.585102043 +0100
-@@ -1,4 +1,4 @@
--# Copyright (C) 1998-2004 by the Free Software Foundation, Inc.
-+# Copyright (C) 1998-2006 by the Free Software Foundation, Inc.
- #
- # This program is free software; you can redistribute it and/or
- # modify it under the terms of the GNU General Public License
-@@ -49,7 +49,7 @@
- 		list_admins genaliases change_pw mailmanctl qrunner inject \
- 		unshunt fix_url.py convert.py transcheck b4b5-archfix \
- 		list_owners msgfmt.py show_qfiles discard rb-archfix \
--		reset_pw.py
-+		reset_pw.py export.py
- 
- BUILDDIR=	../build/bin
- 
-diff -urNad mailman-2.1.9~/bin/export.py mailman-2.1.9/bin/export.py
---- mailman-2.1.9~/bin/export.py	1970-01-01 01:00:00.000000000 +0100
-+++ mailman-2.1.9/bin/export.py	2007-01-20 04:56:07.585102043 +0100
-@@ -0,0 +1,382 @@
-+#! @PYTHON@
-+#
-+# Copyright (C) 2006-2007 by the Free Software Foundation, Inc.
-+#
-+# This program is free software; you can redistribute it and/or
-+# modify it under the terms of the GNU General Public License
-+# as published by the Free Software Foundation; either version 2
-+# of the License, or (at your option) any later version.
-+#
-+# This program is distributed in the hope that it will be useful,
-+# but WITHOUT ANY WARRANTY; without even the implied warranty of
-+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+# GNU General Public License for more details.
-+#
-+# You should have received a copy of the GNU General Public License
-+# along with this program; if not, write to the Free Software
-+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
-+# USA.
-+
-+"""Export an XML representation of a mailing list."""
-+
-+import os
-+import sys
-+import sha
-+import base64
-+import codecs
-+import datetime
-+import optparse
-+
-+from xml.sax.saxutils import escape
-+
-+import paths
-+from Mailman import Defaults
-+from Mailman import Errors
-+from Mailman import MemberAdaptor
-+from Mailman import Utils
-+from Mailman import mm_cfg
-+from Mailman.MailList import MailList
-+from Mailman.i18n import _
-+
-+__i18n_templates__ = True
-+
-+SPACE           = ' '
-+DOLLAR_STRINGS  = ('msg_header', 'msg_footer',
-+                   'digest_header', 'digest_footer',
-+                   'autoresponse_postings_text',
-+                   'autoresponse_admin_text',
-+                   'autoresponse_request_text')
-+SALT_LENGTH     = 4 # bytes
-+
-+TYPES = {
-+    mm_cfg.Toggle         : 'bool',
-+    mm_cfg.Radio          : 'radio',
-+    mm_cfg.String         : 'string',
-+    mm_cfg.Text           : 'text',
-+    mm_cfg.Email          : 'email',
-+    mm_cfg.EmailList      : 'email_list',
-+    mm_cfg.Host           : 'host',
-+    mm_cfg.Number         : 'number',
-+    mm_cfg.FileUpload     : 'upload',
-+    mm_cfg.Select         : 'select',
-+    mm_cfg.Topics         : 'topics',
-+    mm_cfg.Checkbox       : 'checkbox',
-+    mm_cfg.EmailListEx    : 'email_list_ex',
-+    mm_cfg.HeaderFilter   : 'header_filter',
-+    }
-+
-+
-+
-+
-+class Indenter:
-+    def __init__(self, fp, indentwidth=4):
-+        self._fp     = fp
-+        self._indent = 0
-+        self._width  = indentwidth
-+
-+    def indent(self):
-+        self._indent += 1
-+
-+    def dedent(self):
-+        self._indent -= 1
-+        assert self._indent >= 0
-+
-+    def write(self, s):
-+        if s <> '\n':
-+            self._fp.write(self._indent * self._width * ' ')
-+        self._fp.write(s)
-+
-+
-+
-+class XMLDumper(object):
-+    def __init__(self, fp):
-+        self._fp        = Indenter(fp)
-+        self._tagbuffer = None
-+        self._stack     = []
-+
-+    def _makeattrs(self, tagattrs):
-+        # The attribute values might contain angle brackets.  They might also
-+        # be None.
-+        attrs = []
-+        for k, v in tagattrs.items():
-+            if v is None:
-+                v = ''
-+            else:
-+                v = escape(str(v))
-+            attrs.append('%s="%s"' % (k, v))
-+        return SPACE.join(attrs)
-+
-+    def _flush(self, more=True):
-+        if not self._tagbuffer:
-+            return
-+        name, attributes = self._tagbuffer
-+        self._tagbuffer = None
-+        if attributes:
-+            attrstr = ' ' + self._makeattrs(attributes)
-+        else:
-+            attrstr = ''
-+        if more:
-+            print >> self._fp, '<%s%s>' % (name, attrstr)
-+            self._fp.indent()
-+            self._stack.append(name)
-+        else:
-+            print >> self._fp, '<%s%s/>' % (name, attrstr)
-+
-+    # Use this method when you know you have sub-elements.
-+    def _push_element(self, _name, **_tagattrs):
-+        self._flush()
-+        self._tagbuffer = (_name, _tagattrs)
-+
-+    def _pop_element(self, _name):
-+        buffered = bool(self._tagbuffer)
-+        self._flush(more=False)
-+        if not buffered:
-+            name = self._stack.pop()
-+            assert name == _name, 'got: %s, expected: %s' % (_name, name)
-+            self._fp.dedent()
-+            print >> self._fp, '</%s>' % name
-+
-+    # Use this method when you do not have sub-elements
-+    def _element(self, _name, _value=None, **_attributes):
-+        self._flush()
-+        if _attributes:
-+            attrs = ' ' + self._makeattrs(_attributes)
-+        else:
-+            attrs = ''
-+        if _value is None:
-+            print >> self._fp, '<%s%s/>' % (_name, attrs)
-+        else:
-+            value = escape(unicode(_value))
-+            print >> self._fp, '<%s%s>%s</%s>' % (_name, attrs, value, _name)
-+
-+    def _do_list_categories(self, mlist, k, subcat=None):
-+        is_converted = bool(getattr(mlist, 'use_dollar_strings', False))
-+        info = mlist.GetConfigInfo(k, subcat)
-+        label, gui = mlist.GetConfigCategories()[k]
-+        if info is None:
-+            return
-+        for data in info[1:]:
-+            if not isinstance(data, tuple):
-+                continue
-+            varname = data[0]
-+            # Variable could be volatile
-+            if varname.startswith('_'):
-+                continue
-+            vtype = data[1]
-+            # Munge the value based on its type
-+            value = None
-+            if hasattr(gui, 'getValue'):
-+                value = gui.getValue(mlist, vtype, varname, data[2])
-+            if value is None:
-+                value = getattr(mlist, varname)
-+            # Do %-string to $-string conversions if the list hasn't already
-+            # been converted.
-+            if varname == 'use_dollar_strings':
-+                continue
-+            if not is_converted and varname in DOLLAR_STRINGS:
-+                value = Utils.to_dollar(value)
-+            widget_type = TYPES[vtype]
-+            if isinstance(value, list):
-+                self._push_element('option', name=varname, type=widget_type)
-+                for v in value:
-+                    self._element('value', v)
-+                self._pop_element('option')
-+            else:
-+                self._element('option', value, name=varname, type=widget_type)
-+
-+    def _dump_list(self, mlist, password_scheme):
-+        # Write list configuration values
-+        self._push_element('list', name=mlist._internal_name)
-+        self._push_element('configuration')
-+        self._element('option',
-+                      mlist.preferred_language,
-+                      name='preferred_language',
-+                      type='string')
-+        self._element('option',
-+                      mlist.password,
-+                      name='password',
-+                      type='string')
-+        for k in mm_cfg.ADMIN_CATEGORIES:
-+            subcats = mlist.GetConfigSubCategories(k)
-+            if subcats is None:
-+                self._do_list_categories(mlist, k)
-+            else:
-+                for subcat in [t[0] for t in subcats]:
-+                    self._do_list_categories(mlist, k, subcat)
-+        self._pop_element('configuration')
-+        # Write membership
-+        self._push_element('roster')
-+        digesters = set(mlist.getDigestMemberKeys())
-+        for member in sorted(mlist.getMembers()):
-+            attrs = dict(id=member)
-+            cased = mlist.getMemberCPAddress(member)
-+            if cased <> member:
-+                attrs['original'] = cased
-+            self._push_element('member', **attrs)
-+            self._element('realname', mlist.getMemberName(member))
-+            self._element('password',
-+                          password_scheme(mlist.getMemberPassword(member)))
-+            self._element('language', mlist.getMemberLanguage(member))
-+            # Delivery status, combined with the type of delivery
-+            attrs = {}
-+            status = mlist.getDeliveryStatus(member)
-+            if status == MemberAdaptor.ENABLED:
-+                attrs['status'] = 'enabled'
-+            else:
-+                attrs['status'] = 'disabled'
-+                attrs['reason'] = {MemberAdaptor.BYUSER    : 'byuser',
-+                                   MemberAdaptor.BYADMIN   : 'byadmin',
-+                                   MemberAdaptor.BYBOUNCE  : 'bybounce',
-+                                   }.get(mlist.getDeliveryStatus(member),
-+                                         'unknown')
-+            if member in digesters:
-+                if mlist.getMemberOption(member, mm_cfg.DisableMime):
-+                    attrs['delivery'] = 'plain'
-+                else:
-+                    attrs['delivery'] = 'mime'
-+            else:
-+                attrs['delivery'] = 'regular'
-+            changed = mlist.getDeliveryStatusChangeTime(member)
-+            if changed:
-+                when = datetime.datetime.fromtimestamp(changed)
-+                attrs['changed'] = when.isoformat()
-+            self._element('delivery', **attrs)
-+            for option, flag in Defaults.OPTINFO.items():
-+                # Digest/Regular delivery flag must be handled separately
-+                if option in ('digest', 'plain'):
-+                    continue
-+                value = mlist.getMemberOption(member, flag)
-+                self._element(option, value)
-+            topics = mlist.getMemberTopics(member)
-+            if not topics:
-+                self._element('topics')
-+            else:
-+                self._push_element('topics')
-+                for topic in topics:
-+                    self._element('topic', topic)
-+                self._pop_element('topics')
-+            self._pop_element('member')
-+        self._pop_element('roster')
-+        self._pop_element('list')
-+
-+    def dump(self, listnames, password_scheme):
-+        print >> self._fp, '<?xml version="1.0" encoding="UTF-8"?>'
-+        self._push_element('mailman', **{
-+            'xmlns:xsi': 'http://www.w3.org/2001/XMLSchema-instance',
-+            'xsi:noNamespaceSchemaLocation': 'ssi-1.0.xsd',
-+            })
-+        for listname in sorted(listnames):
-+            try:
-+                mlist = MailList(listname, lock=False)
-+            except Errors.MMUnknownListError:
-+                print >> sys.stderr, _('No such list: %(listname)s')
-+                continue
-+            self._dump_list(mlist, password_scheme)
-+        self._pop_element('mailman')
-+
-+    def close(self):
-+        while self._stack:
-+            self._pop_element()
-+
-+
-+
-+def no_password(password):
-+    return '{NONE}'
-+
-+
-+def plaintext_password(password):
-+    return '{PLAIN}' + password
-+
-+
-+def sha_password(password):
-+    h = sha.new(password)
-+    return '{SHA}' + base64.b64encode(h.digest())
-+
-+
-+def ssha_password(password):
-+    salt = os.urandom(SALT_LENGTH)
-+    h = sha.new(password)
-+    h.update(salt)
-+    return '{SSHA}' + base64.b64encode(h.digest() + salt)
-+
-+
-+SCHEMES = {
-+    'none'  : no_password,
-+    'plain' : plaintext_password,
-+    'sha'   : sha_password,
-+    }
-+
-+try:
-+    os.urandom(1)
-+except NotImplementedError:
-+    pass
-+else:
-+    SCHEMES['ssha'] = ssha_password
-+
-+
-+
-+def parseargs():
-+    parser = optparse.OptionParser(version=mm_cfg.VERSION,
-+                                   usage=_("""\
-+%%prog [options]
-+
-+Export the configuration and members of a mailing list in XML format."""))
-+    parser.add_option('-o', '--outputfile',
-+                      metavar='FILENAME', default=None, type='string',
-+                      help=_("""\
-+Output XML to FILENAME.  If not given, or if FILENAME is '-', standard out is
-+used."""))
-+    parser.add_option('-p', '--password-scheme',
-+                      default='none', type='string', help=_("""\
-+Specify the RFC 2307 style hashing scheme for passwords included in the
-+output.  Use -P to get a list of supported schemes, which are
-+case-insensitive."""))
-+    parser.add_option('-P', '--list-hash-schemes',
-+                      default=False, action='store_true', help=_("""\
-+List the supported password hashing schemes and exit.  The scheme labels are
-+case-insensitive."""))
-+    parser.add_option('-l', '--listname',
-+                      default=[], action='append', type='string',
-+                      metavar='LISTNAME', dest='listnames', help=_("""\
-+The list to include in the output.  If not given, then all mailing lists are
-+included in the XML output.  Multiple -l flags may be given."""))
-+    opts, args = parser.parse_args()
-+    if args:
-+        parser.print_help()
-+        parser.error(_('Unexpected arguments'))
-+    if opts.list_hash_schemes:
-+        for label in SCHEMES:
-+            print label.upper()
-+        sys.exit(0)
-+    if opts.password_scheme.lower() not in SCHEMES:
-+        parser.error(_('Invalid password scheme'))
-+    return parser, opts, args
-+
-+
-+
-+def main():
-+    parser, opts, args = parseargs()
-+
-+    if opts.outputfile in (None, '-'):
-+        # This will fail if there are characters in the output incompatible
-+        # with stdout.
-+        fp = sys.stdout
-+    else:
-+        fp = codecs.open(opts.outputfile, 'w', 'utf-8')
-+
-+    try:
-+        dumper = XMLDumper(fp)
-+        if opts.listnames:
-+            listnames = opts.listnames
-+        else:
-+            listnames = Utils.list_names()
-+        dumper.dump(listnames, SCHEMES[opts.password_scheme])
-+        dumper.close()
-+    finally:
-+        if fp is not sys.stdout:
-+            fp.close()
-+
-+
-+
-+if __name__ == '__main__':
-+    main()
-diff -urNad mailman-2.1.9~/configure.in mailman-2.1.9/configure.in
---- mailman-2.1.9~/configure.in	2005-08-27 03:40:17.000000000 +0200
-+++ mailman-2.1.9/configure.in	2007-01-20 04:56:07.585102043 +0100
-@@ -1,4 +1,4 @@
--# Copyright (C) 1998-2004 by the Free Software Foundation, Inc.
-+# Copyright (C) 1998-2006 by the Free Software Foundation, Inc.
- #
- # This program is free software; you can redistribute it and/or
- # modify it under the terms of the GNU General Public License
-@@ -15,7 +15,7 @@
- # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- 
- dnl Process this file with autoconf to produce a configure script.
--AC_REVISION($Revision: 7462 $)
-+AC_REVISION($Revision: 8122 $)
- AC_PREREQ(2.0)
- AC_INIT(src/common.h)
- 
-@@ -553,6 +553,7 @@
- bin/convert.py \
- bin/discard \
- bin/dumpdb \
-+bin/export.py \
- bin/find_member \
- bin/fix_url.py \
- bin/genaliases \

Modified: trunk/debian/patches/series
===================================================================
--- trunk/debian/patches/series	2008-01-14 11:37:36 UTC (rev 529)
+++ trunk/debian/patches/series	2008-02-08 23:02:53 UTC (rev 530)
@@ -13,7 +13,6 @@
 51_nocompile.pyc.patch -p0
 52_check_perms_lstat.patch -p0
 53_disable_addons.patch -p0
-56_fix_de_broken_links.patch -p0
 58_fix_es_translation.patch -p0
 59_fix_missing_language_crash.patch -p0
 61_fix_ru_siteowner.patch -p0
@@ -31,5 +30,4 @@
 78_DeprecationWarning.patch -p0
 79_archiver_slash.patch -p0
 80_fix_string_search.patch -p0
-81_backport_export.dpatch -p1
 99_js_templates.patch -p0

Modified: trunk/debian/rules
===================================================================
--- trunk/debian/rules	2008-01-14 11:37:36 UTC (rev 529)
+++ trunk/debian/rules	2008-02-08 23:02:53 UTC (rev 530)
@@ -113,7 +113,6 @@
 	rm debian/$(package)/usr/lib/$(package)/Mailman/mm_cfg.py
 	dh_link etc/$(package)/mm_cfg.py \
 		usr/lib/$(package)/Mailman/mm_cfg.py
-	cp -a admin/www debian/mailman/usr/share/doc/$(package)/html
 	for bin in $(binaries); \
 		do dh_link usr/lib/$(package)/bin/$$bin usr/sbin/$$bin; done
 	mv debian/mailman/usr/sbin/arch debian/mailman/usr/sbin/mmarch




More information about the Pkg-mailman-hackers mailing list