Add Debian directory
[mspang/vmailman.git] / debian / patches / 77_header_folding_in_attachments.patch
1 Patch: 77_header_folding_in_attachments.patch
2 Author: Lionel Elie Mamane <lionel@mamane.lu>
3 Don't fold headers into message/rfc822 attachments.
4 This avoids breaking signatures.
5 Index: Mailman/Generator.py
6 ===================================================================
7 --- /dev/null   1970-01-01 00:00:00.000000000 +0000
8 +++ Mailman/Generator.py        2006-08-15 15:14:57.000000000 +0800
9 @@ -0,0 +1,55 @@
10 +# Copyright (C) 1998-2003 by the Free Software Foundation, Inc.
11 +#                    2005 Lionel Elie Mamane <lionel@mamane.lu>
12 +#
13 +# This program is free software; you can redistribute it and/or
14 +# modify it under the terms of the GNU General Public License
15 +# as published by the Free Software Foundation; either version 2
16 +# of the License, or (at your option) any later version.
17 +#
18 +# This program is distributed in the hope that it will be useful,
19 +# but WITHOUT ANY WARRANTY; without even the implied warranty of
20 +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
21 +# GNU General Public License for more details.
22 +#
23 +# You should have received a copy of the GNU General Public License
24 +# along with this program; if not, write to the Free Software
25 +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26 +#
27 +# Author: Bernhard Reiter <bernhard@gnu.org>
28 +# Changed by Lionel Elie Mamane December 2005 from version on
29 +# http://ftp.intevation.de/users/bernhard/mailman/mailman-2.1.4-avoid-headerfolding-python21.diff
30 +# to use clone/children_maxheaderlen trick instead of _write_headers/mangle_from_
31 +
32 +"""Standard Mailman generator object.
33 +
34 +A subclass of email.Generator which only folds long headers
35 +in the top object level. 
36 +This is needed because Mailman should leave the reveiced message parts alone.
37 +Otherwise is might change subparts over which a signature was calculated,
38 +breaking it while doing so.
39 +"""
40 +
41 +import email
42 +import email.Generator
43 +
44 +try:
45 +    True, False
46 +except NameError:
47 +    True = 1
48 +    False = 0
49 +
50 +\f
51 +class Generator(email.Generator.Generator):
52 +    """Generates output from a Message object tree, keeping signatures.
53 +
54 +       Headers will by default _not_ be folded in attachments.
55 +    """
56 +    def __init__(self, outfp, mangle_from_=False,
57 +                 maxheaderlen=78, children_maxheaderlen=0):
58 +        email.Generator.Generator.__init__(self, outfp, mangle_from_=mangle_from_, maxheaderlen=maxheaderlen)
59 +        self.__children_maxheaderlen = children_maxheaderlen
60 +
61 +    def clone(self, fp):
62 +        """Clone this generator with maxheaderlen set for children"""
63 +        return self.__class__(fp, self._mangle_from_, self.__children_maxheaderlen, self.__children_maxheaderlen)
64 +
65 Index: Mailman/Mailbox.py
66 ===================================================================
67 --- Mailman/Mailbox.py.orig     2006-08-15 15:12:10.000000000 +0800
68 +++ Mailman/Mailbox.py  2006-08-15 15:14:57.000000000 +0800
69 @@ -22,10 +22,10 @@
70  
71  import email
72  from email.Parser import Parser
73 -from email.Generator import Generator
74  from email.Errors import MessageParseError
75  
76  from Mailman import mm_cfg
77 +from Mailman.Generator import Generator
78  from Mailman.Message import Message
79  
80  try:
81 @@ -65,7 +65,7 @@
82          # Seek to the last char of the mailbox
83          self.fp.seek(1, 2)
84          # Create a Generator instance to write the message to the file
85 -        g = Generator(self.fp)
86 +        g = Generator(self.fp, mangle_from_=True)
87          g.flatten(msg, unixfrom=True)
88          # Add one more trailing newline for separation with the next message
89          # to be appended to the mbox.
90 Index: Mailman/Message.py
91 ===================================================================
92 --- Mailman/Message.py.orig     2006-08-15 15:12:10.000000000 +0800
93 +++ Mailman/Message.py  2006-08-15 15:14:57.000000000 +0800
94 @@ -22,6 +22,8 @@
95  """
96  
97  import re
98 +from cStringIO import StringIO
99 +
100  import email
101  import email.Message
102  import email.Utils
103 @@ -32,6 +34,7 @@
104  
105  from Mailman import mm_cfg
106  from Mailman import Utils
107 +from Mailman.Generator import Generator
108  
109  COMMASPACE = ', '
110  
111 @@ -199,6 +202,16 @@
112          except (UnicodeError, LookupError, ValueError):
113              return failobj
114  
115 +    def as_string(self, unixfrom=False):
116 +        """Return entire formatted message as a string using Mailman.Generator.
117 +
118 +        Operates like email.Message.Message.as_string, only
119 +       using Mailman's Generator class. Only the top headers will get folded.
120 +        """
121 +        fp = StringIO()
122 +        g = Generator(fp)
123 +        g.flatten(self, unixfrom=unixfrom)
124 +        return fp.getvalue()
125  
126  \f
127  class UserNotification(Message):