aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Mailman/Handlers/Hold.py12
-rw-r--r--Mailman/SecurityManager.py20
-rw-r--r--Mailman/Utils.py8
3 files changed, 25 insertions, 15 deletions
diff --git a/Mailman/Handlers/Hold.py b/Mailman/Handlers/Hold.py
index fdfaa09d..f6008d45 100644
--- a/Mailman/Handlers/Hold.py
+++ b/Mailman/Handlers/Hold.py
@@ -1,4 +1,4 @@
-# Copyright (C) 1998-2005 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
@@ -12,7 +12,8 @@
#
# 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.
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+# USA.
"""Determine whether this message should be held for approval.
@@ -196,7 +197,12 @@ def hold_for_approval(mlist, msg, msgdata, exc):
# BAW: This should really be tied into the email confirmation system so
# that the message can be approved or denied via email as well as the
# web.
- if type(exc) is ClassType:
+ #
+ # XXX We use the weird type(type) construct below because in Python 2.1,
+ # type is a function not a type and so can't be used as the second
+ # argument in isinstance(). However, in Python 2.5, exceptions are
+ # new-style classes and so are not of ClassType.
+ if isinstance(exc, ClassType) or isinstance(exc, type(type)):
# Go ahead and instantiate it now.
exc = exc()
listname = mlist.real_name
diff --git a/Mailman/SecurityManager.py b/Mailman/SecurityManager.py
index ba65fec2..01610b43 100644
--- a/Mailman/SecurityManager.py
+++ b/Mailman/SecurityManager.py
@@ -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
@@ -12,7 +12,8 @@
#
# 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.
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+# USA.
"""Handle passwords and sanitize approved messages."""
@@ -347,11 +348,12 @@ splitter = re.compile(';\s*')
def parsecookie(s):
c = {}
- for p in splitter.split(s):
- try:
- k, v = p.split('=', 1)
- except ValueError:
- pass
- else:
- c[k] = v
+ for line in s.splitlines():
+ for p in splitter.split(line):
+ try:
+ k, v = p.split('=', 1)
+ except ValueError:
+ pass
+ else:
+ c[k] = v
return c
diff --git a/Mailman/Utils.py b/Mailman/Utils.py
index 5218fed8..5c9707c7 100644
--- a/Mailman/Utils.py
+++ b/Mailman/Utils.py
@@ -443,6 +443,9 @@ def UnobscureEmail(addr):
+class OuterExit(Exception):
+ pass
+
def findtext(templatefile, dict=None, raw=False, lang=None, mlist=None):
# Make some text from a template file. The order of searches depends on
# whether mlist and lang are provided. Once the templatefile is found,
@@ -509,7 +512,6 @@ def findtext(templatefile, dict=None, raw=False, lang=None, mlist=None):
searchdirs.append(os.path.join(mm_cfg.TEMPLATE_DIR, 'site'))
searchdirs.append(mm_cfg.TEMPLATE_DIR)
# Start scanning
- quickexit = 'quickexit'
fp = None
try:
for lang in languages:
@@ -517,12 +519,12 @@ def findtext(templatefile, dict=None, raw=False, lang=None, mlist=None):
filename = os.path.join(dir, lang, templatefile)
try:
fp = open(filename)
- raise quickexit
+ raise OuterExit
except IOError, e:
if e.errno <> errno.ENOENT: raise
# Okay, it doesn't exist, keep looping
fp = None
- except quickexit:
+ except OuterExit:
pass
if fp is None:
# Try one last time with the distro English template, which, unless