? rejects.txt
Index: INSTALL
===================================================================
RCS file: /cvsroot/mailman/mailman/INSTALL,v
retrieving revision 1.48
retrieving revision 1.48.2.1
diff -u -r1.48 -r1.48.2.1
--- INSTALL 16 Nov 2000 21:57:37 -0000 1.48
+++ INSTALL 2 Jul 2002 16:28:37 -0000 1.48.2.1
@@ -1,5 +1,5 @@
Mailman - The GNU Mailing List Management System
-Copyright (C) 1998,1999,2000 Free Software Foundation, Inc.
+Copyright (C) 1998,1999,2000,2001,2002 Free Software Foundation, Inc.
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
This file contains installation instructions for GNU Mailman, which is
@@ -19,12 +19,12 @@
0. Installation requirements
You must have the Python interpreter installed somewhere on your
- system. Currently Python 1.5.2 or later is required (Python 2.0
- should work fine). For information about obtaining Python source
- code, RPM packages, or pre-compiled binaries please see:
+ system. Currently Python 1.5.2 or later is required, but the
+ latest stable releases of Python 2.1.3 and 2.2.1 are recommended.
+ For information about obtaining Python source code, RPM packages,
+ or pre-compiled binaries please see:
http://www.python.org
-
http://www.pythonlabs.com
You must also have an ANSI C compiler in order to build the
wrapper programs which are used for improved security. The GNU C
@@ -180,6 +180,28 @@
--with-gcc=no
Don't use gcc, even if it is found. `cc' must be found on
your $PATH
+
+ You may also need to set the "mailhost" and the "wwwhost"
+ values. The mailhost value is what is used as the domain part of
+ an email address, e.g. the "dom.ain" in "
[email protected]". The
+ "wwwhost" is the domain part of your urls, e.g. the "www.dom.ain"
+ in "
http://www.dom.ain/mailman/listinfo".
+
+ The configure script tries to guess these based on system
+ information, but it may fail or be incorrect. If it fails, the
+ configure script will exit. In either case you can set these host
+ values by setting the environment variables $MAILHOST and $WWWHOST
+ before you run configure, e.g.:
+
+ % MAILHOST=mail.dom.ain
+ % WWWHOST=www.dom.ain
+ % export MAILHOST WWWHOST
+ % ./configure ...
+
+ Note that if you do not set $WWWHOST, the value for $MAILHOST will
+ be used automatically. Also, you can always change these values
+ by adding some settings to your mm_cfg.py file after you've built
+ and installed Mailman. See below for details.
3. Check your installation
Index: NEWS
===================================================================
RCS file: /cvsroot/mailman/mailman/NEWS,v
retrieving revision 1.25.2.15
retrieving revision 1.25.2.16
diff -u -r1.25.2.15 -r1.25.2.16
--- NEWS 20 May 2002 15:22:32 -0000 1.25.2.15
+++ NEWS 2 Jul 2002 17:34:17 -0000 1.25.2.16
@@ -1,8 +1,23 @@
Mailman - The GNU Mailing List Management System
-Copyright (C) 1998,1999,2000,2001 by the Free Software Foundation, Inc.
+Copyright (C) 1998,1999,2000,2001,2002 by the Free Software Foundation, Inc.
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
Here is a history of user visible changes to Mailman.
+
+2.0.12 (02-Jul-2002)
+
+ - Implemented a guard against some reply loops and 'bot
+ subscription attacks. Specifically, if a message to -request
+ has a Precedence: bulk (or list, or junk) header, the command is
+ ignored. Well-behaved 'bots should always include such a
+ header.
+
+ - Changes to the configure script so that you can pass in the mail
+ host and web host by setting the environment variables MAILHOST
+ and WWWHOST respectively. configure will also exit if it can't
+ figure out these values (usually due to broken dns).
+
+ - Closed another minor cross-site scripting vulnerability.
2.0.11 (20-May-2002)
Index: README
===================================================================
RCS file: /cvsroot/mailman/mailman/README,v
retrieving revision 1.53.2.1
retrieving revision 1.53.2.2
diff -u -r1.53.2.1 -r1.53.2.2
--- README 3 Jan 2001 16:48:18 -0000 1.53.2.1
+++ README 2 Jul 2002 16:28:55 -0000 1.53.2.2
@@ -1,5 +1,5 @@
Mailman - The GNU Mailing List Management System
-Copyright (C) 1998,1999,2000,2001 by the Free Software Foundation, Inc.
+Copyright (C) 1998,1999,2000,2001,2002 by the Free Software Foundation, Inc.
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
INTRODUCTION
@@ -36,7 +36,9 @@
http://www.python.org
- It should work fine with Python 1.6 and 2.0.
+ It should work fine with the latest stable Python releases,
+ version 2.1.3 and 2.2.1. These releases are recommended over
+ Python 1.5.2.
You will also need an ANSI C compiler; gcc (the GNU C compiler)
works just fine. Mailman currently works only on Unix-alike
Index: configure
===================================================================
RCS file: /cvsroot/mailman/mailman/configure,v
retrieving revision 1.49
retrieving revision 1.49.2.1
diff -u -r1.49 -r1.49.2.1
--- configure 22 Sep 2000 16:56:44 -0000 1.49
+++ configure 2 Jul 2002 16:30:50 -0000 1.49.2.1
@@ -1,6 +1,6 @@
#! /bin/sh
-# From configure.in Revision: 1.50
+# From configure.in Revision: 1.51
# Guess values for system-dependent variables and create Makefiles.
# Generated automatically using autoconf version 2.13
@@ -1454,10 +1454,26 @@
# attempt to figure out the default hostname and URL
from socket import *
import string
-fqdn = None
-www = None
-host, aliases, ipaddrs = gethostbyaddr(gethostbyname(gethostname()))
-aliases.insert(0, host)
+import sys
+import os
+def barf(fqdn, www):
+ sys.stdout = sys.stderr
+ print 'host info not found, set \$MAILHOST and/or \$WWWHOST environ vars'
+ print '\$MAILHOST=%s, \$WWWHOST=%s' % (fqdn, www)
+ sys.exit(1)
+fqdn = os.environ.get('MAILHOST')
+www = os.environ.get('WWWHOST')
+aliases = []
+if fqdn:
+ aliases.append(fqdn)
+if www:
+ aliases.append(www)
+if not fqdn:
+ try:
+ host, aliases, ipaddrs = gethostbyaddr(gethostbyname(gethostname()))
+ except herror:
+ barf(fqdn, www)
+ aliases.insert(0, host)
for h in aliases:
parts = string.split(h, '.')
if 5 > 1:
@@ -1467,6 +1483,10 @@
fqdn = h
if www and fqdn:
break
+if fqdn is None:
+ barf(fqdn, www)
+if www is None:
+ www = fqdn
fp = open('conftest.out', 'w')
if not www and fqdn:
fp.write('%s\n%s\n' % (fqdn, fqdn))
@@ -1478,16 +1498,20 @@
fp.close()
EOF
$PYTHON conftest.py
+if [ "$?" == "1" ]
+then
+ exit
+fi
echo $ac_n "checking for default fully qualified host name""... $ac_c" 1>&6
-echo "configure:1484: checking for default fully qualified host name" >&5
+echo "configure:1508: checking for default fully qualified host name" >&5
if test -z "$FQDN"
then
FQDN=`head -1 conftest.out`
fi
echo "$ac_t""$FQDN" 1>&6
echo $ac_n "checking for default URL host component""... $ac_c" 1>&6
-echo "configure:1491: checking for default URL host component" >&5
+echo "configure:1515: checking for default URL host component" >&5
if test -z "$URL"
then
URL=`tail -1 conftest.out`
@@ -1499,12 +1523,12 @@
for ac_func in strerror setregid syslog
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:1503: checking for $ac_func" >&5
+echo "configure:1527: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 1508 "configure"
+#line 1532 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -1527,7 +1551,7 @@
; return 0; }
EOF
-if { (eval echo configure:1531: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:1555: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -1558,17 +1582,17 @@
# with the appropriate include.
for lib in bsd socket inet; do
echo $ac_n "checking for syslog in -l$lib""... $ac_c" 1>&6
-echo "configure:1562: checking for syslog in -l$lib" >&5
+echo "configure:1586: checking for syslog in -l$lib" >&5
Mailman_LIBS_save="$LIBS"; LIBS="$LIBS -l$lib"
cat > conftest.$ac_ext <<EOF
-#line 1565 "configure"
+#line 1589 "configure"
#include "confdefs.h"
#include <syslog.h>
int main() {
syslog(LOG_DEBUG, "Just a test...");
; return 0; }
EOF
-if { (eval echo configure:1572: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:1596: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
echo "$ac_t""yes" 1>&6
cat >> confdefs.h <<\EOF
@@ -1590,7 +1614,7 @@
# Checks for header files.
echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
-echo "configure:1594: checking how to run the C preprocessor" >&5
+echo "configure:1618: checking how to run the C preprocessor" >&5
# On Suns, sometimes $CPP names a directory.
if test -n "$CPP" && test -d "$CPP"; then
CPP=
@@ -1605,13 +1629,13 @@
# On the NeXT, cc -E runs the code through the compiler's parser,
# not just through cpp.
cat > conftest.$ac_ext <<EOF
-#line 1609 "configure"
+#line 1633 "configure"
#include "confdefs.h"
#include <assert.h>
Syntax Error
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1615: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1639: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
:
@@ -1622,13 +1646,13 @@
rm -rf conftest*
CPP="${CC-cc} -E -traditional-cpp"
cat > conftest.$ac_ext <<EOF
-#line 1626 "configure"
+#line 1650 "configure"
#include "confdefs.h"
#include <assert.h>
Syntax Error
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1632: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1656: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
:
@@ -1639,13 +1663,13 @@
rm -rf conftest*
CPP="${CC-cc} -nologo -E"
cat > conftest.$ac_ext <<EOF
-#line 1643 "configure"
+#line 1667 "configure"
#include "confdefs.h"
#include <assert.h>
Syntax Error
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1649: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1673: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
:
@@ -1670,12 +1694,12 @@
echo "$ac_t""$CPP" 1>&6
echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
-echo "configure:1674: checking for ANSI C header files" >&5
+echo "configure:1698: checking for ANSI C header files" >&5
if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 1679 "configure"
+#line 1703 "configure"
#include "confdefs.h"
#include <stdlib.h>
#include <stdarg.h>
@@ -1683,7 +1707,7 @@
#include <float.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1687: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1711: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -1700,7 +1724,7 @@
if test $ac_cv_header_stdc = yes; then
# SunOS 4.x string.h does not declare mem*, contrary to ANSI.
cat > conftest.$ac_ext <<EOF
-#line 1704 "configure"
+#line 1728 "configure"
#include "confdefs.h"
#include <string.h>
EOF
@@ -1718,7 +1742,7 @@
if test $ac_cv_header_stdc = yes; then
# ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
cat > conftest.$ac_ext <<EOF
-#line 1722 "configure"
+#line 1746 "configure"
#include "confdefs.h"
#include <stdlib.h>
EOF
@@ -1739,7 +1763,7 @@
:
else
cat > conftest.$ac_ext <<EOF
-#line 1743 "configure"
+#line 1767 "configure"
#include "confdefs.h"
#include <ctype.h>
#define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
@@ -1750,7 +1774,7 @@
exit (0); }
EOF
-if { (eval echo configure:1754: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:1778: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
:
else
@@ -1777,17 +1801,17 @@
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:1781: checking for $ac_hdr" >&5
+echo "configure:1805: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 1786 "configure"
+#line 1810 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1791: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1815: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -1816,12 +1840,12 @@
# Checks for typedefs, structures, and compiler characteristics.
echo $ac_n "checking for uid_t in sys/types.h""... $ac_c" 1>&6
-echo "configure:1820: checking for uid_t in sys/types.h" >&5
+echo "configure:1844: checking for uid_t in sys/types.h" >&5
if eval "test \"`echo '$''{'ac_cv_type_uid_t'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 1825 "configure"
+#line 1849 "configure"
#include "confdefs.h"
#include <sys/types.h>
EOF
@@ -1850,7 +1874,7 @@
fi
echo $ac_n "checking type of array argument to getgroups""... $ac_c" 1>&6
-echo "configure:1854: checking type of array argument to getgroups" >&5
+echo "configure:1878: checking type of array argument to getgroups" >&5
if eval "test \"`echo '$''{'ac_cv_type_getgroups'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1858,7 +1882,7 @@
ac_cv_type_getgroups=cross
else
cat > conftest.$ac_ext <<EOF
-#line 1862 "configure"
+#line 1886 "configure"
#include "confdefs.h"
/* Thanks to Mike Rendell for this test. */
@@ -1883,7 +1907,7 @@
}
EOF
-if { (eval echo configure:1887: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:1911: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
ac_cv_type_getgroups=gid_t
else
@@ -1897,7 +1921,7 @@
if test $ac_cv_type_getgroups = cross; then
cat > conftest.$ac_ext <<EOF
-#line 1901 "configure"
+#line 1925 "configure"
#include "confdefs.h"
#include <unistd.h>
EOF
@@ -1925,12 +1949,12 @@
for ac_func in vsnprintf
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:1929: checking for $ac_func" >&5
+echo "configure:1953: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 1934 "configure"
+#line 1958 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -1953,7 +1977,7 @@
; return 0; }
EOF
-if { (eval echo configure:1957: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:1981: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
Index: configure.in
===================================================================
RCS file: /cvsroot/mailman/mailman/configure.in,v
retrieving revision 1.51
retrieving revision 1.51.2.1
diff -u -r1.51 -r1.51.2.1
--- configure.in 22 Sep 2000 16:56:44 -0000 1.51
+++ configure.in 2 Jul 2002 16:30:50 -0000 1.51.2.1
@@ -1,4 +1,4 @@
-# Copyright (C) 1998,1999,2000 by the Free Software Foundation, Inc.
+# Copyright (C) 1998,1999,2000,2001,2002 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
dnl Process this file with autoconf to produce a configure script.
-AC_REVISION($Revision: 1.51 $)
+AC_REVISION($Revision: 1.51.2.1 $)
AC_PREREQ(2.0)
AC_INIT(src/alias-wrapper.c)
@@ -397,10 +397,26 @@
# attempt to figure out the default hostname and URL
from socket import *
import string
-fqdn = None
-www = None
-host, aliases, ipaddrs = gethostbyaddr(gethostbyname(gethostname()))
-aliases.insert(0, host)
+import sys
+import os
+def barf(fqdn, www):
+ sys.stdout = sys.stderr
+ print 'host info not found, set \$MAILHOST and/or \$WWWHOST environ vars'
+ print '\$MAILHOST=%s, \$WWWHOST=%s' % (fqdn, www)
+ sys.exit(1)
+fqdn = os.environ.get('MAILHOST')
+www = os.environ.get('WWWHOST')
+aliases = []
+if fqdn:
+ aliases.append(fqdn)
+if www:
+ aliases.append(www)
+if not fqdn:
+ try:
+ host, aliases, ipaddrs = gethostbyaddr(gethostbyname(gethostname()))
+ except herror:
+ barf(fqdn, www)
+ aliases.insert(0, host)
for h in aliases:
parts = string.split(h, '.')
if len(parts) > 1:
@@ -410,6 +426,10 @@
fqdn = h
if www and fqdn:
break
+if fqdn is None:
+ barf(fqdn, www)
+if www is None:
+ www = fqdn
fp = open('conftest.out', 'w')
if not www and fqdn:
fp.write('%s\n%s\n' % (fqdn, fqdn))
@@ -421,6 +441,10 @@
fp.close()
EOF
$PYTHON conftest.py
+if [ "$?" == "1" ]
+then
+ exit
+fi
changequote([, ])
AC_MSG_CHECKING(for default fully qualified host name)
if test -z "$FQDN"
Index: Mailman/MailCommandHandler.py
===================================================================
RCS file: /cvsroot/mailman/mailman/Mailman/Attic/MailCommandHandler.py,v
retrieving revision 1.70
retrieving revision 1.70.2.1
diff -u -r1.70 -r1.70.2.1
--- Mailman/MailCommandHandler.py 1 Aug 2000 22:03:23 -0000 1.70
+++ Mailman/MailCommandHandler.py 2 Jul 2002 16:33:23 -0000 1.70.2.1
@@ -1,4 +1,4 @@
-# Copyright (C) 1998,1999,2000 by the Free Software Foundation, Inc.
+# Copyright (C) 1998,1999,2000,2001,2002 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
@@ -110,11 +110,23 @@
self.AddToResponse(text, trunc=trunc, prefix=prefix)
def ParseMailCommands(self, msg):
- # Break any infloops. If this has come from a Mailman server then
- # it'll have this header. It's still possible to infloop between two
- # servers because there's no guaranteed way to know it came from a
- # bot.
- if msg.get('x-beenthere') or msg.get('list-id'):
+ # Break any mail loops, as defined by the presence of a
+ #
+ # 1. Precedence: header with values "bulk", "list", or "junk"
+ # 2. Mailman X-BeenThere: header, regardless of the value.
+ # 3. An RFC 2369 List-Id: header
+ #
+ # Note further that some misconfigured list managers don't include any
+ # of these clues, so there's little we can do to break loops in that
+ # case, except throttle the number of responses sent to any one
+ # requester in a day. That's a job for MM2.1.
+ precedence = msg.get('precedence', '').lower()
+ ack = msg.get('x-ack', '').lower()
+ beenthere = msg.get('x-beenthere', '')
+ listid = msg.get('list-id', '')
+ if (precedence in ('bulk', 'list', 'junk') or
+ beenthere or listid) and not ack == 'yes':
+ # Then
return
# check the autoresponse stuff
if self.autorespond_requests:
Index: Mailman/Utils.py
===================================================================
RCS file: /cvsroot/mailman/mailman/Mailman/Utils.py,v
retrieving revision 1.104.2.8
retrieving revision 1.104.2.9
diff -u -r1.104.2.8 -r1.104.2.9
--- Mailman/Utils.py 20 May 2002 14:37:32 -0000 1.104.2.8
+++ Mailman/Utils.py 2 Jul 2002 17:04:17 -0000 1.104.2.9
@@ -1,4 +1,4 @@
-# Copyright (C) 1998,1999,2000,2001 by the Free Software Foundation, Inc.
+# Copyright (C) 1998,1999,2000,2001,2002 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
@@ -422,8 +422,7 @@
def QuoteHyperChars(str):
- from cgi import escape
- return escape(str, quote=1)
+ return cgi.escape(str, quote=1)
@@ -631,7 +630,7 @@
elif os.environ.has_key('SCRIPT_NAME') and os.environ.has_key('PATH_INFO'):
url = os.environ['SCRIPT_NAME'] + os.environ['PATH_INFO']
if escape:
- return cgi.escape(url)
+ return QuoteHyperChars(url)
return url
Index: Mailman/Version.py
===================================================================
RCS file: /cvsroot/mailman/mailman/Mailman/Version.py,v
retrieving revision 1.20.2.11
retrieving revision 1.20.2.12
diff -u -r1.20.2.11 -r1.20.2.12
--- Mailman/Version.py 20 May 2002 15:16:08 -0000 1.20.2.11
+++ Mailman/Version.py 2 Jul 2002 17:23:32 -0000 1.20.2.12
@@ -1,4 +1,4 @@
-# Copyright (C) 1998,1999,2000,2001 by the Free Software Foundation, Inc.
+# Copyright (C) 1998,1999,2000,2001,2002 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
# Mailman version
-VERSION = "2.0.11"
+VERSION = "2.0.12"
# And as a hex number in the manner of PY_VERSION_HEX
ALPHA = 0xa
@@ -27,7 +27,7 @@
MAJOR_REV = 2
MINOR_REV = 0
-MICRO_REV = 11
+MICRO_REV = 12
REL_LEVEL = FINAL
# at most 15 beta releases!
REL_SERIAL = 0
Index: Mailman/Cgi/admin.py
===================================================================
RCS file: /cvsroot/mailman/mailman/Mailman/Cgi/admin.py,v
retrieving revision 1.82.2.5
retrieving revision 1.82.2.6
diff -u -r1.82.2.5 -r1.82.2.6
--- Mailman/Cgi/admin.py 27 Nov 2001 20:23:53 -0000 1.82.2.5
+++ Mailman/Cgi/admin.py 2 Jul 2002 17:04:17 -0000 1.82.2.6
@@ -1,4 +1,4 @@
-# Copyright (C) 1998,1999,2000,2001 by the Free Software Foundation, Inc.
+# Copyright (C) 1998,1999,2000,2001,2002 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
@@ -68,7 +68,7 @@
mlist = MailList.MailList(listname, lock=0)
except Errors.MMListError, e:
# Avoid cross-site scripting attack
- safelistname = cgi.escape(listname)
+ safelistname = Utils.QuoteHyperChars(listname)
FormatAdminOverview('No such list <em>%s</em>' % safelistname)
syslog('error', 'Someone tried to access the admin interface for a '
'non-existent list: %s' % listname)
Index: Mailman/Cgi/admindb.py
===================================================================
RCS file: /cvsroot/mailman/mailman/Mailman/Cgi/admindb.py,v
retrieving revision 1.36.2.7
retrieving revision 1.36.2.8
diff -u -r1.36.2.7 -r1.36.2.8
--- Mailman/Cgi/admindb.py 1 Apr 2002 18:47:46 -0000 1.36.2.7
+++ Mailman/Cgi/admindb.py 2 Jul 2002 17:04:17 -0000 1.36.2.8
@@ -1,4 +1,4 @@
-# Copyright (C) 1998,1999,2000,2001 by the Free Software Foundation, Inc.
+# Copyright (C) 1998,1999,2000,2001,2002 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
@@ -67,7 +67,7 @@
mlist = MailList.MailList(listname, lock=0)
except Errors.MMListError, e:
# Avoid cross-site scripting attack
- safelistname = cgi.escape(listname)
+ safelistname = Utils.QuoteHyperChars(listname)
handle_no_list(doc, 'No such list <em>%s</em><p>' % safelistname)
syslog('error', 'No such list "%s": %s\n' % (listname, e))
return
@@ -207,10 +207,10 @@
return
raise
t = Table(cellspacing=0, cellpadding=0, width='100%')
- t.AddRow([Bold('From:'), cgi.escape(sender)])
+ t.AddRow([Bold('From:'), Utils.QuoteHyperChars(sender)])
row, col = t.GetCurrentRowIndex(), t.GetCurrentCellIndex()
t.AddCellInfo(row, col-1, align='right')
- t.AddRow([Bold('Subject:'), cgi.escape(subject)])
+ t.AddRow([Bold('Subject:'), Utils.QuoteHyperChars(subject)])
t.AddCellInfo(row+1, col-1, align='right')
t.AddRow([Bold('Reason:'), reason])
t.AddCellInfo(row+2, col-1, align='right')
@@ -248,12 +248,12 @@
t.AddCellInfo(row, col-1, align='right')
t.AddRow([Bold('Message Headers:'),
TextArea('headers-%d' % id,
- cgi.escape(string.join(msg.headers, '')),
+ Utils.QuoteHyperChars(string.join(msg.headers, '')),
rows=10, cols=80)])
row, col = t.GetCurrentRowIndex(), t.GetCurrentCellIndex()
t.AddCellInfo(row, col-1, align='right')
t.AddRow([Bold('Message Excerpt:'),
- TextArea('fulltext-%d' % id, cgi.escape(text),
+ TextArea('fulltext-%d' % id, Utils.QuoteHyperChars(text),
rows=10, cols=80)])
t.AddCellInfo(row+1, col-1, align='right')
form.AddItem(t)
Index: Mailman/Cgi/edithtml.py
===================================================================
RCS file: /cvsroot/mailman/mailman/Mailman/Cgi/edithtml.py,v
retrieving revision 1.12.2.1
retrieving revision 1.12.2.2
diff -u -r1.12.2.1 -r1.12.2.2
--- Mailman/Cgi/edithtml.py 27 Nov 2001 20:23:53 -0000 1.12.2.1
+++ Mailman/Cgi/edithtml.py 2 Jul 2002 17:04:17 -0000 1.12.2.2
@@ -1,4 +1,4 @@
-# Copyright (C) 1998,1999,2000,2001 by the Free Software Foundation, Inc.
+# Copyright (C) 1998,1999,2000,2001,2002 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
@@ -50,7 +50,7 @@
mlist = MailList.MailList(listname, lock=0)
except Errors.MMListError, e:
# Avoid cross-site scripting attack
- safelistname = cgi.escape(listname)
+ safelistname = Utils.QuoteHyperChars(listname)
doc.AddItem(Header(2, 'No such list <em>%s</em>' % safelistname))
print doc.Format(bgcolor='#ffffff')
syslog('error', 'No such list "%s": %s\n' % (listname, e))
@@ -77,7 +77,7 @@
break
else:
# Avoid cross-site scripting attack
- safetmplname = cgi.escape(template_name)
+ safetmplname = Utils.QuoteHyperChars(template_name)
doc.SetTitle('Edit HTML : Error')
doc.AddItem(Header(2, "%s: Invalid template" % safetmplname))
doc.AddItem(mlist.GetMailmanFooter())
Index: Mailman/Cgi/handle_opts.py
===================================================================
RCS file: /cvsroot/mailman/mailman/Mailman/Cgi/Attic/handle_opts.py,v
retrieving revision 1.30.2.4
retrieving revision 1.30.2.5
diff -u -r1.30.2.4 -r1.30.2.5
--- Mailman/Cgi/handle_opts.py 27 Nov 2001 20:23:53 -0000 1.30.2.4
+++ Mailman/Cgi/handle_opts.py 2 Jul 2002 17:04:17 -0000 1.30.2.5
@@ -1,4 +1,4 @@
-# Copyright (C) 1998,1999,2000,2001 by the Free Software Foundation, Inc.
+# Copyright (C) 1998,1999,2000,2001,2002 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
@@ -35,7 +35,7 @@
if user:
# Avoid cross-site scripting attack
url = '%s/%s' % (mlist.GetScriptURL('options'),
- Utils.ObscureEmail(cgi.escape(user)))
+ Utils.ObscureEmail(Utils.QuoteHyperChars(user)))
results = results + '<p>Continue to ' + \
Link(url, 'edit your personal options').Format() + \
'.'
@@ -66,7 +66,7 @@
mlist = MailList.MailList(listname, lock=0)
except Errors.MMListError, e:
# Avoid cross-site scripting attack
- safelistname = cgi.escape(listname)
+ safelistname = Utils.QuoteHyperChars(listname)
doc.AddItem(Header(2, "Error"))
doc.AddItem(Bold('No such list <em>%s</em>' % safelistname))
print doc.Format(bgcolor="#ffffff")
@@ -110,7 +110,7 @@
if not Utils.FindMatchingAddresses(user, mlist.members,
mlist.digest_members):
# Avoid cross-site scripting attack
- safeuser = cgi.escape(user)
+ safeuser = Utils.QuoteHyperChars(user)
PrintResults(mlist, operation, doc, "%s not a member!<p>" % safeuser)
if form.has_key("unsub"):
Index: Mailman/Cgi/listinfo.py
===================================================================
RCS file: /cvsroot/mailman/mailman/Mailman/Cgi/listinfo.py,v
retrieving revision 1.21.2.1
retrieving revision 1.21.2.2
diff -u -r1.21.2.1 -r1.21.2.2
--- Mailman/Cgi/listinfo.py 27 Nov 2001 20:23:53 -0000 1.21.2.1
+++ Mailman/Cgi/listinfo.py 2 Jul 2002 17:04:17 -0000 1.21.2.2
@@ -1,4 +1,4 @@
-# Copyright (C) 1998,1999,2000,2001 by the Free Software Foundation, Inc.
+# Copyright (C) 1998,1999,2000,2001,2002 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
@@ -43,7 +43,7 @@
mlist = MailList.MailList(listname, lock=0)
except Errors.MMListError, e:
# Avoid cross-site scripting attack
- safelistname = cgi.escape(listname)
+ safelistname = Utils.QuoteHyperChars(listname)
FormatListinfoOverview('No such list <em>%s</em>' % safelistname)
syslog('error', 'listinfo: no such list "%s": %s' % (listname, e))
return
Index: Mailman/Cgi/options.py
===================================================================
RCS file: /cvsroot/mailman/mailman/Mailman/Cgi/options.py,v
retrieving revision 1.18.2.1
retrieving revision 1.18.2.2
diff -u -r1.18.2.1 -r1.18.2.2
--- Mailman/Cgi/options.py 27 Nov 2001 20:23:54 -0000 1.18.2.1
+++ Mailman/Cgi/options.py 2 Jul 2002 17:04:17 -0000 1.18.2.2
@@ -1,4 +1,4 @@
-# Copyright (C) 1998,1999,2000,2001 by the Free Software Foundation, Inc.
+# Copyright (C) 1998,1999,2000,2001,2002 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
@@ -55,7 +55,7 @@
mlist = MailList.MailList(listname, lock=0)
except Errors.MMListError, e:
# Avoid cross-site scripting attacks
- safelistname = cgi.escape(listname)
+ safelistname = Utils.QuoteHyperChars(listname)
doc.AddItem(Header(2, "Error"))
doc.AddItem(Bold('No such list <em>%s</em>' % safelistname))
print doc.Format()
@@ -67,7 +67,7 @@
if not mlist.members.has_key(user) and \
not mlist.digest_members.has_key(user):
# Avoid cross-site scripting attacks
- safeuser = cgi.escape(user)
+ safeuser = Utils.QuoteHyperChars(user)
doc.AddItem(Header(2, "Error"))
doc.AddItem(Bold("%s: No such member %s." % (listname, safeuser)))
doc.AddItem(mlist.GetMailmanFooter())
Index: Mailman/Cgi/private.py
===================================================================
RCS file: /cvsroot/mailman/mailman/Mailman/Cgi/private.py,v
retrieving revision 1.23.2.1
retrieving revision 1.23.2.2
diff -u -r1.23.2.1 -r1.23.2.2
--- Mailman/Cgi/private.py 27 Nov 2001 20:23:54 -0000 1.23.2.1
+++ Mailman/Cgi/private.py 2 Jul 2002 17:04:17 -0000 1.23.2.2
@@ -1,4 +1,4 @@
-# Copyright (C) 1998,1999,2000,2001 by the Free Software Foundation, Inc.
+# Copyright (C) 1998,1999,2000,2001,2002 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
@@ -131,7 +131,7 @@
mlist.IsListInitialized()
except Errors.MMListError, e:
# Avoid cross-site scripting attacks
- safelistname = cgi.escape(listname)
+ safelistname = Utils.QuoteHyperChars(listname)
msg = 'No such list <em>%s</em>' % safelistname
doc.SetTitle("Private Archive Error - %s" % msg)
doc.AddItem(Header(2, msg))
@@ -193,8 +193,8 @@
f = open(true_filename, 'r')
except IOError:
# Avoid cross-site scripting attacks
- safetruefilename = cgi.escape(true_filename)
- safepath = cgi.escape(path)
+ safetruefilename = Utils.QuoteHyperChars(true_filename)
+ safepath = Utils.QuoteHyperChars(path)
print 'Content-type: text/html\n'
print "<H3>Archive File Not Found</H3>"
Index: Mailman/Cgi/roster.py
===================================================================
RCS file: /cvsroot/mailman/mailman/Mailman/Cgi/roster.py,v
retrieving revision 1.11.2.1
retrieving revision 1.11.2.2
diff -u -r1.11.2.1 -r1.11.2.2
--- Mailman/Cgi/roster.py 27 Nov 2001 20:23:54 -0000 1.11.2.1
+++ Mailman/Cgi/roster.py 2 Jul 2002 17:04:17 -0000 1.11.2.2
@@ -1,4 +1,4 @@
-# Copyright (C) 1998,1999,2000,2001 by the Free Software Foundation, Inc.
+# Copyright (C) 1998,1999,2000,2001,2002 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
@@ -48,7 +48,7 @@
mlist = MailList.MailList(listname, lock=0)
except Errors.MMListError, e:
# Avoid cross-site scripting attacks
- safelistname = cgi.escape(listname)
+ safelistname = Utils.QuoteHyperChars(listname)
error_page('No such list <em>%s</em>' % safelistname)
syslog('error', 'roster: no such list "%s": %s' % (listname, e))
return
Index: Mailman/Cgi/subscribe.py
===================================================================
RCS file: /cvsroot/mailman/mailman/Mailman/Cgi/subscribe.py,v
retrieving revision 1.29.2.2
retrieving revision 1.29.2.3
diff -u -r1.29.2.2 -r1.29.2.3
--- Mailman/Cgi/subscribe.py 27 Nov 2001 20:23:54 -0000 1.29.2.2
+++ Mailman/Cgi/subscribe.py 2 Jul 2002 17:04:17 -0000 1.29.2.3
@@ -1,4 +1,4 @@
-# Copyright (C) 1998,1999,2000,2001 by the Free Software Foundation, Inc.
+# Copyright (C) 1998,1999,2000,2001,2002 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
@@ -45,7 +45,7 @@
mlist = MailList.MailList(listname, lock=0)
except Errors.MMListError, e:
# Avoid cross-site scripting attacks
- safelistname = cgi.escape(listname)
+ safelistname = Utils.QuoteHyperChars(listname)
doc.AddItem(Header(2, "Error"))
doc.AddItem(Bold('No such list <em>%s</em>' % safelistname))
print doc.Format(bgcolor="#ffffff")
@@ -118,7 +118,7 @@
if not member:
doc.AddItem(Header(2, "Error"))
doc.AddItem(Bold("%s has no subscribed addr <i>%s</i>."
- % (mlist.real_name, addr)))
+ % (mlist.real_name, Utils.QuoteHyperChars(addr))))
doc.AddItem(mlist.GetMailmanFooter())
print doc.Format(bgcolor="#ffffff")
return
Index: admin/www/download.ht
===================================================================
RCS file: /cvsroot/mailman/mailman/admin/www/download.ht,v
retrieving revision 1.5.2.14
retrieving revision 1.5.2.15
diff -u -r1.5.2.14 -r1.5.2.15
--- admin/www/download.ht 20 May 2002 15:17:42 -0000 1.5.2.14
+++ admin/www/download.ht 2 Jul 2002 17:24:54 -0000 1.5.2.15
@@ -60,9 +60,9 @@
<h3>Downloading</h3>
<p>Version
-(<!-VERSION--->2.0.11<!-VERSION--->,
+(<!-VERSION--->2.0.12<!-VERSION--->,
released on
-<!-DATE--->May 20 2002<!-DATE--->)
+<!-DATE--->Jul 2 2002<!-DATE--->)
is the current GNU release. It is available from the following mirror sites:
<ul>
Index: admin/www/download.html
===================================================================
RCS file: /cvsroot/mailman/mailman/admin/www/download.html,v
retrieving revision 1.6.2.16
retrieving revision 1.6.2.17
diff -u -r1.6.2.16 -r1.6.2.17
--- admin/www/download.html 20 May 2002 15:17:42 -0000 1.6.2.16
+++ admin/www/download.html 2 Jul 2002 17:24:55 -0000 1.6.2.17
@@ -1,7 +1,7 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<!-- THIS PAGE IS AUTOMATICALLY GENERATED. DO NOT EDIT. -->
-<!-- Mon May 20 11:16:31 2002 -->
+<!-- Tue Jul 2 13:24:21 2002 -->
<!-- USING HT2HTML 2.0 -->
<!-- SEE
http://ht2html.sf.net -->
<!-- User-specified headers:
@@ -246,9 +246,9 @@
<h3>Downloading</h3>
<p>Version
-(<!-VERSION--->2.0.11<!-VERSION--->,
+(<!-VERSION--->2.0.12<!-VERSION--->,
released on
-<!-DATE--->May 20 2002<!-DATE--->)
+<!-DATE--->Jul 2 2002<!-DATE--->)
is the current GNU release. It is available from the following mirror sites:
<ul>
Index: src/common.c
===================================================================
RCS file: /cvsroot/mailman/mailman/src/common.c,v
retrieving revision 1.26.2.1
retrieving revision 1.26.2.2
diff -u -r1.26.2.1 -r1.26.2.2
--- src/common.c 29 May 2001 13:20:27 -0000 1.26.2.1
+++ src/common.c 2 Jul 2002 17:24:29 -0000 1.26.2.2
@@ -96,15 +96,9 @@
printf("<title>Mailman CGI error!!!</title>\n");
printf("</head><body>\n");
printf("<h1>Mailman CGI error!!!</h1>\n");
- printf("The expected gid of the Mailman CGI wrapper did ");
- printf("not match the gid as set by the Web server.");
- printf("<p>The most likely cause is that Mailman was ");
- printf("configured and installed incorrectly. Please ");
- printf("read the INSTALL instructions again, paying close ");
- printf("attention to the <tt>--with-cgi-gid</tt> configure ");
- printf("option. This entry is being stored in your syslog:");
+ printf("This entry is being stored in your syslog:");
printf("\n<pre>\n");
- printf(log_entry);
+ printf("%s\n", log_entry);
printf("</pre>\n");
}
else