Sun, 04 Jan 2009 08:37:28 +0100
Back out mistaken run time user change.
1 Index: Mailman/Archiver/pipermail.py
2 --- Mailman/Archiver/pipermail.py.orig 2008-06-30 18:29:46 +0200
3 +++ Mailman/Archiver/pipermail.py 2008-07-01 20:48:10 +0200
4 @@ -122,9 +122,9 @@
5 parentID = article.parentID
6 if parentID is not None and self.articleIndex.has_key(parentID):
7 parent = self.getArticle(archive, parentID)
8 - myThreadKey = parent.threadKey + article.date + '-'
9 + myThreadKey = parent.threadKey + article.date + '/' + article.msgid + '-'
10 else:
11 - myThreadKey = article.date + '-'
12 + myThreadKey = article.date + '/' + article.msgid + '-'
13 article.threadKey = myThreadKey
14 key = myThreadKey, article.msgid
15 self.setThreadKey(archive, key, article.msgid)
16 @@ -418,7 +418,7 @@
17 else:
18 parent = self.database.getArticle(self.archive,
19 article.parentID)
20 - article.threadKey = parent.threadKey+article.date+'-'
21 + article.threadKey = parent.threadKey + article.date + '/' + article.msgid + '-'
22 self.database.setThreadKey(self.archive,
23 (article.threadKey, article.msgid),
24 msgid)
25 @@ -632,9 +632,9 @@
26 article.parentID = parentID = self.get_parent_info(arch, article)
27 if parentID:
28 parent = self.database.getArticle(arch, parentID)
29 - article.threadKey = parent.threadKey + article.date + '-'
30 + article.threadKey = parent.threadKey + article.date + '/' + article.msgid + '-'
31 else:
32 - article.threadKey = article.date + '-'
33 + article.threadKey = article.date + '/' + article.msgid + '-'
34 key = article.threadKey, article.msgid
36 self.database.setThreadKey(arch, key, article.msgid)
37 Index: Mailman/Commands/cmd_subscribe.py
38 --- Mailman/Commands/cmd_subscribe.py.orig 2008-06-30 18:29:46 +0200
39 +++ Mailman/Commands/cmd_subscribe.py 2008-07-01 20:48:10 +0200
40 @@ -84,6 +84,7 @@
41 if password is None:
42 password = Utils.MakeRandomPassword()
43 if address is None:
44 + h = None
45 realname, address = parseaddr(res.msg['from'])
46 if not address:
47 # Fall back to the sender address
48 Index: Mailman/HTMLFormatter.py
49 --- Mailman/HTMLFormatter.py.orig 2008-06-30 18:29:46 +0200
50 +++ Mailman/HTMLFormatter.py 2008-07-01 20:48:10 +0200
51 @@ -44,7 +44,7 @@
52 realname = self.real_name
53 hostname = self.host_name
54 listinfo_link = Link(self.GetScriptURL('listinfo'), realname).Format()
55 - owner_link = Link('mailto:' + self.GetOwnerEmail(), ownertext).Format()
56 + owner_link = Link('mailto:' + self.GetOwnerEmail(), realname + '-owner').Format()
57 innertext = _('%(listinfo_link)s list run by %(owner_link)s')
58 return Container(
59 '<hr>',
60 Index: Mailman/Handlers/Decorate.py
61 --- Mailman/Handlers/Decorate.py.orig 2008-06-30 18:29:46 +0200
62 +++ Mailman/Handlers/Decorate.py 2008-07-01 20:48:10 +0200
63 @@ -197,6 +197,7 @@
64 del msg['content-transfer-encoding']
65 del msg['content-disposition']
66 msg['Content-Type'] = 'multipart/mixed'
67 + msg['Mime-version'] = '1.0'
71 Index: Mailman/Handlers/Scrubber.py
72 --- Mailman/Handlers/Scrubber.py.orig 2008-06-30 18:29:46 +0200
73 +++ Mailman/Handlers/Scrubber.py 2008-07-01 20:48:10 +0200
74 @@ -385,6 +385,8 @@
75 t = unicode(t, 'ascii', 'replace')
76 try:
77 # Should use HTML-Escape, or try generalizing to UTF-8
78 + if len(charset) == 0:
79 + charset = 'us-ascii'
80 t = t.encode(charset, 'replace')
81 except (UnicodeError, LookupError, ValueError,
82 AssertionError):
83 Index: Mailman/Queue/OutgoingRunner.py
84 --- Mailman/Queue/OutgoingRunner.py.orig 2008-06-30 18:29:46 +0200
85 +++ Mailman/Queue/OutgoingRunner.py 2008-07-01 20:48:10 +0200
86 @@ -89,6 +89,7 @@
87 syslog('error', 'Cannot connect to SMTP server %s on port %s',
88 mm_cfg.SMTPHOST, port)
89 self.__logged = True
90 + self._snooze(0)
91 return True
92 except Errors.SomeRecipientsFailed, e:
93 # Handle local rejects of probe messages differently.
94 Index: Mailman/htmlformat.py
95 --- Mailman/htmlformat.py.orig 2008-06-30 18:29:46 +0200
96 +++ Mailman/htmlformat.py 2008-07-01 20:48:10 +0200
97 @@ -300,7 +300,8 @@
98 charset = 'us-ascii'
99 if self.language:
100 charset = Utils.GetCharSet(self.language)
101 - output = ['Content-Type: text/html; charset=%s\n' % charset]
102 + output = ['Content-Type: text/html; charset=%s' % charset]
103 + output.append('Cache-control: no-cache\n')
104 if not self.suppress_head:
105 kws.setdefault('bgcolor', self.bgcolor)
106 tab = ' ' * indent
107 Index: bin/check_perms
108 --- bin/check_perms.orig 2008-06-30 18:29:46 +0200
109 +++ bin/check_perms 2008-07-01 20:48:10 +0200
110 @@ -82,7 +82,7 @@
111 return os.stat(path)[ST_MODE]
113 def statgidmode(path):
114 - stat = os.stat(path)
115 + stat = os.lstat(path)
116 return stat[ST_MODE], stat[ST_GID]
118 seen = {}
119 Index: bin/config_list
120 --- bin/config_list.orig 2008-06-30 18:29:46 +0200
121 +++ bin/config_list 2008-07-01 20:48:10 +0200
122 @@ -307,6 +307,11 @@
123 in mm_cfg.OPTINFO.items()
124 if validval & bitval]
125 gui._setValue(mlist, k, validval, fakedoc)
126 + # Ugly hack, but seems to be needed since
127 + # new_member_options isn't really a number in gui.
128 + # -- tfheen, 2003-12-06
129 + if k == "new_member_options":
130 + mlist.new_member_options = validval
131 # BAW: when to do gui._postValidate()???
132 finally:
133 if savelist and not checkonly:
134 Index: bin/mailmanctl
135 --- bin/mailmanctl.orig 2008-06-30 18:29:46 +0200
136 +++ bin/mailmanctl 2008-07-01 20:48:10 +0200
137 @@ -417,6 +417,13 @@
138 # won't be opening any terminal devices, don't do the ultra-paranoid
139 # suggestion of doing a second fork after the setsid() call.
140 os.setsid()
141 +
142 + # Be sure to close any open std{in,out,err}
143 + devnull = os.open('/dev/null', 0)
144 + os.dup2(devnull, 0)
145 + os.dup2(devnull, 1)
146 + os.dup2(devnull, 2)
147 +
148 # Instead of cd'ing to root, cd to the Mailman installation home
149 os.chdir(mm_cfg.PREFIX)
150 # Set our file mode creation umask
151 Index: bin/newlist
152 --- bin/newlist.orig 2008-06-30 18:29:46 +0200
153 +++ bin/newlist 2008-07-01 20:48:10 +0200
154 @@ -87,6 +87,9 @@
155 defined in your Defaults.py file or overridden by settings in mm_cfg.py).
157 Note that listnames are forced to lowercase.
158 +
159 +The list admin address need to be a fully-qualified address, like
160 +owner@example.com, not just owner.
161 """
163 import sys
164 @@ -94,6 +97,7 @@
165 import getpass
166 import getopt
167 import sha
168 +import grp
170 import paths
171 from Mailman import mm_cfg
172 @@ -122,6 +126,9 @@
175 def main():
176 + gid = grp.getgrnam(mm_cfg.MAILMAN_GROUP)[2]
177 + if os.getgid() != mm_cfg.MAILMAN_GROUP:
178 + os.setgid(gid)
179 try:
180 opts, args = getopt.getopt(sys.argv[1:], 'hql:u:e:',
181 ['help', 'quiet', 'language=',
182 @@ -203,7 +210,7 @@
183 except Errors.BadListNameError, s:
184 usage(1, _('Illegal list name: %(s)s'))
185 except Errors.EmailAddressError, s:
186 - usage(1, _('Bad owner email address: %(s)s'))
187 + usage(1, _('Bad owner email address: %(s)s. Owner addresses need to be fully-qualified names, like "owner@example.com", not just "owner".'))
188 except Errors.MMListAlreadyExistsError:
189 usage(1, _('List already exists: %(listname)s'))
191 Index: bin/update
192 --- bin/update.orig 2008-06-30 18:29:46 +0200
193 +++ bin/update 2008-07-01 20:48:10 +0200
194 @@ -552,9 +552,11 @@
195 file20 = os.path.join(mm_cfg.DATA_DIR, 'pending_subscriptions.db')
196 file214 = os.path.join(mm_cfg.DATA_DIR, 'pending.pck')
197 db = None
198 + ver = None
199 # Try to load the Mailman 2.0 file
200 try:
201 fp = open(file20)
202 + ver = "20"
203 except IOError, e:
204 if e.errno <> errno.ENOENT: raise
205 else:
206 @@ -566,6 +568,7 @@
207 # Try to load the Mailman 2.1.x where x < 5, file
208 try:
209 fp = open(file214)
210 + ver = "214"
211 except IOError, e:
212 if e.errno <> errno.ENOENT: raise
213 else:
214 @@ -599,8 +602,12 @@
215 # data[0] is the address being unsubscribed
216 addrops_by_address.setdefault(data[0], []).append((key, val))
217 elif op == Pending.SUBSCRIPTION:
218 - # data[0] is a UserDesc object
219 - addr = data[0].address
220 + if ver == "20":
221 + # data is tuple (emailaddr, password, digest)
222 + addr = data[0]
223 + else:
224 + # data[0] is a UserDesc object
225 + addr = data[0].address
226 subs_by_address.setdefault(addr, []).append((key, val))
227 elif op == Pending.RE_ENABLE:
228 # data[0] is the mailing list's internal name
229 Index: scripts/driver
230 --- scripts/driver.orig 2008-06-30 18:29:46 +0200
231 +++ scripts/driver 2008-07-01 20:48:10 +0200
232 @@ -95,6 +95,15 @@
233 module = getattr(pkg, scriptname)
234 main = getattr(module, 'main')
235 try:
236 + import os
237 + request_method = os.environ.get('REQUEST_METHOD')
238 + if not request_method in ['GET', 'POST', 'HEAD']:
239 + print "Status: 405 Method not allowed"
240 + print "Content-type: text/plain"
241 + print
242 + print "The method is not allowed"
243 + sys.exit()
244 +
245 try:
246 sys.stderr = logger
247 sys.stdout = tempstdout