rpms/mailman/devel mailman-2.1.10-FHS.patch, NONE, 1.1 mailman-2.1.10-LC_CTYPE.patch, NONE, 1.1 mailman-2.1.10-archive-reply.patch, NONE, 1.1 mailman-2.1.10-cron.patch, NONE, 1.1 mailman-2.1.10-ctypefix.patch, NONE, 1.1 .cvsignore, 1.16, 1.17 mailman-2.1.9-ctypo-new.patch, 1.1, 1.2 mailman.spec, 1.69, 1.70 sources, 1.16, 1.17 mailman-2.1-permissions.patch, 1.5, NONE mailman-2.1.5-date_overflows.patch, 1.2, NONE mailman-2.1.9-ctypefix.patch, 1.1, NONE mailman-2.1.9-ctypo.patch, 1.2, NONE mailman-2.1.9-cve-2008-0564.patch, 1.1, NONE mailman-2.1.9-inotify.patch, 1.1, NONE mailman-FHS.patch, 1.3, NONE mailman-archive-reply.patch, 1.1, NONE mailman-cron.patch, 1.6, NONE mailman-init.patch, 1.2, NONE
Tomas Smetana (tsmetana)
fedora-extras-commits at redhat.com
Tue May 13 08:33:13 UTC 2008
Author: tsmetana
Update of /cvs/pkgs/rpms/mailman/devel
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv1168
Modified Files:
.cvsignore mailman-2.1.9-ctypo-new.patch mailman.spec sources
Added Files:
mailman-2.1.10-FHS.patch mailman-2.1.10-LC_CTYPE.patch
mailman-2.1.10-archive-reply.patch mailman-2.1.10-cron.patch
mailman-2.1.10-ctypefix.patch
Removed Files:
mailman-2.1-permissions.patch
mailman-2.1.5-date_overflows.patch
mailman-2.1.9-ctypefix.patch mailman-2.1.9-ctypo.patch
mailman-2.1.9-cve-2008-0564.patch mailman-2.1.9-inotify.patch
mailman-FHS.patch mailman-archive-reply.patch
mailman-cron.patch mailman-init.patch
Log Message:
* Mon May 12 2008 Tomas Smetana <tsmetana at redhat.com> - 3:2.1.10-1
- new upstream version
mailman-2.1.10-FHS.patch:
--- NEW FILE mailman-2.1.10-FHS.patch ---
diff -up mailman-2.1.10/misc/Makefile.in.FHS mailman-2.1.10/misc/Makefile.in
--- mailman-2.1.10/misc/Makefile.in.FHS 2008-05-13 09:24:29.000000000 +0200
+++ mailman-2.1.10/misc/Makefile.in 2008-05-13 09:25:28.000000000 +0200
@@ -27,6 +27,12 @@ bindir= @bindir@
prefix= @prefix@
exec_prefix= @exec_prefix@
var_prefix= @VAR_PREFIX@
+configdir= @CONFIG_DIR@
+lockdir= @LOCK_DIR@
+logdir= @LOG_DIR@
+piddir= @PID_DIR@
+queuedir= @QUEUE_DIR@
+MAILMAN_GROUP= @MAILMAN_GROUP@
DESTDIR=
CC= @CC@
@@ -87,7 +93,7 @@ install-other:
$(INSTALL) -m $(FILEMODE) paths.py $$dir; \
done
$(INSTALL) -m $(EXEMODE) mailman $(DESTDIR)$(SCRIPTSDIR)
- $(INSTALL) -m $(FILEMODE) sitelist.cfg $(DESTDIR)$(DATADIR)
+ $(INSTALL) -m $(FILEMODE) sitelist.cfg $(DESTDIR)$(configdir)
install-packages:
for p in $(PACKAGES); \
diff -up mailman-2.1.10/bin/check_perms.FHS mailman-2.1.10/bin/check_perms
--- mailman-2.1.10/bin/check_perms.FHS 2008-05-13 09:10:26.000000000 +0200
+++ mailman-2.1.10/bin/check_perms 2008-05-13 09:11:38.000000000 +0200
@@ -183,7 +183,8 @@ def checkall():
print C_('checking mode for %(prefix)s')
dirs = {}
for d in (mm_cfg.PREFIX, mm_cfg.EXEC_PREFIX, mm_cfg.VAR_PREFIX,
- mm_cfg.LOG_DIR):
+ mm_cfg.CONFIG_DIR, mm_cfg.DATA_DIR, mm_cfg.LOCK_DIR,
+ mm_cfg.LOG_DIR, mm_cfg.QUEUE_DIR, mm_cfg.PID_DIR):
dirs[d] = True
for d in dirs.keys():
try:
diff -up mailman-2.1.10/Mailman/MTA/Postfix.py.FHS mailman-2.1.10/Mailman/MTA/Postfix.py
--- mailman-2.1.10/Mailman/MTA/Postfix.py.FHS 2008-05-13 09:15:34.000000000 +0200
+++ mailman-2.1.10/Mailman/MTA/Postfix.py 2008-05-13 09:16:23.000000000 +0200
@@ -32,8 +32,8 @@ from Mailman.MTA.Utils import makealiase
from Mailman.Logging.Syslog import syslog
LOCKFILE = os.path.join(mm_cfg.LOCK_DIR, 'creator')
-ALIASFILE = os.path.join(mm_cfg.DATA_DIR, 'aliases')
-VIRTFILE = os.path.join(mm_cfg.DATA_DIR, 'virtual-mailman')
+ALIASFILE = os.path.join(mm_cfg.CONFIG_DIR, 'aliases')
+VIRTFILE = os.path.join(mm_cfg.CONFIG_DIR, 'virtual-mailman')
try:
True, False
diff -up mailman-2.1.10/Mailman/Defaults.py.in.FHS mailman-2.1.10/Mailman/Defaults.py.in
--- mailman-2.1.10/Mailman/Defaults.py.in.FHS 2008-05-13 09:13:51.000000000 +0200
+++ mailman-2.1.10/Mailman/Defaults.py.in 2008-05-13 09:15:04.000000000 +0200
@@ -1296,9 +1296,11 @@ AuthSiteAdmin = 5 # Site Administrat
# Useful directories
LIST_DATA_DIR = os.path.join(VAR_PREFIX, 'lists')
-LOG_DIR = os.path.join(VAR_PREFIX, 'logs')
-LOCK_DIR = os.path.join(VAR_PREFIX, 'locks')
+LOG_DIR = '@LOG_DIR@'
+LOCK_DIR = '@LOCK_DIR@'
+CONFIG_DIR = '@CONFIG_DIR@'
DATA_DIR = os.path.join(VAR_PREFIX, 'data')
+PID_DIR = '@PID_DIR@'
SPAM_DIR = os.path.join(VAR_PREFIX, 'spam')
WRAPPER_DIR = os.path.join(EXEC_PREFIX, 'mail')
BIN_DIR = os.path.join(PREFIX, 'bin')
@@ -1309,7 +1311,7 @@ PUBLIC_ARCHIVE_FILE_DIR = os.path.join(
PRIVATE_ARCHIVE_FILE_DIR = os.path.join(VAR_PREFIX, 'archives', 'private')
# Directories used by the qrunner subsystem
-QUEUE_DIR = os.path.join(VAR_PREFIX, 'qfiles')
+QUEUE_DIR = '@QUEUE_DIR@'
INQUEUE_DIR = os.path.join(QUEUE_DIR, 'in')
OUTQUEUE_DIR = os.path.join(QUEUE_DIR, 'out')
CMDQUEUE_DIR = os.path.join(QUEUE_DIR, 'commands')
@@ -1323,9 +1325,9 @@ RETRYQUEUE_DIR = os.path.join(QUEUE_DIR
MAILDIR_DIR = os.path.join(QUEUE_DIR, 'maildir')
# Other useful files
-PIDFILE = os.path.join(DATA_DIR, 'master-qrunner.pid')
-SITE_PW_FILE = os.path.join(DATA_DIR, 'adm.pw')
-LISTCREATOR_PW_FILE = os.path.join(DATA_DIR, 'creator.pw')
+PIDFILE = os.path.join(PID_DIR, 'master-qrunner.pid')
+SITE_PW_FILE = os.path.join(CONFIG_DIR, 'adm.pw')
+LISTCREATOR_PW_FILE = os.path.join(CONFIG_DIR, 'creator.pw')
# Import a bunch of version numbers
from Version import *
diff -up mailman-2.1.10/Makefile.in.FHS mailman-2.1.10/Makefile.in
--- mailman-2.1.10/Makefile.in.FHS 2008-05-13 09:17:36.000000000 +0200
+++ mailman-2.1.10/Makefile.in 2008-05-13 09:22:35.000000000 +0200
@@ -28,6 +28,11 @@ bindir= @bindir@
prefix= @prefix@
exec_prefix= @exec_prefix@
var_prefix= @VAR_PREFIX@
+configdir= @CONFIG_DIR@
+lockdir= @LOCK_DIR@
+logdir= @LOG_DIR@
+piddir= @PID_DIR@
+queuedir= @QUEUE_DIR@
DESTDIR=
CC= @CC@
@@ -41,8 +46,11 @@ DEFS= @DEFS@
OPT= @OPT@
CFLAGS= @CFLAGS@ $(OPT) $(DEFS)
+FHS_DIRS= \
+ ${configdir} ${lockdir} ${logdir} ${piddir} ${queuedir}
+
VAR_DIRS= \
- logs archives lists locks data spam qfiles \
+ archives lists data spam \
archives/private archives/public
ARCH_INDEP_DIRS= \
@@ -105,6 +113,15 @@ doinstall: $(SUBDIRS)
else true; \
fi; \
done
+ @for d in $(FHS_DIRS); \
+ do \
+ dir=$(DESTDIR)/$$d; \
+ if test ! -d $$dir; then \
+ echo "Creating directory $$dir"; \
+ $(INSTALL) -d -m $(DIRMODE) $$dir; \
+ else true; \
+ fi; \
+ done
chmod o-r $(DESTDIR)$(var_prefix)/archives/private
@for d in $(ARCH_INDEP_DIRS); \
do \
diff -up mailman-2.1.10/configure.in.FHS mailman-2.1.10/configure.in
--- mailman-2.1.10/configure.in.FHS 2008-05-13 09:02:50.000000000 +0200
+++ mailman-2.1.10/configure.in 2008-05-13 09:03:58.000000000 +0200
@@ -215,6 +215,62 @@ else
prefixcheck=$VAR_PREFIX
fi
+# Get the configuration file directory
+AC_SUBST(CONFIG_DIR)
+AC_MSG_CHECKING(for --with-config-dir)
+AC_ARG_WITH(config-dir, dnl
+[ --with-config-dir specify directory for configuration data other than [VAR_]PREFIX/data])
+case "$with_config_dir" in
+ yes|no|"") CONFIG_DIR="$VAR_PREFIX/data";;
+ *) CONFIG_DIR=$with_config_dir;;
+esac
+AC_MSG_RESULT($CONFIG_DIR)
+
+# Get the lock directory
+AC_SUBST(LOCK_DIR)
+AC_MSG_CHECKING(for --with-lock-dir)
+AC_ARG_WITH(lock-dir, dnl
+[ --with-lock-dir specify directory for lock files other than [VAR_]PREFIX/locks])
+case "$with_lock_dir" in
+ yes|no|"") LOCK_DIR="$VAR_PREFIX/locks";;
+ *) LOCK_DIR=$with_lock_dir;;
+esac
+AC_MSG_RESULT($LOCK_DIR)
+
+# Get the log directory
+AC_SUBST(LOG_DIR)
+AC_MSG_CHECKING(for --with-log-dir)
+AC_ARG_WITH(log-dir, dnl
+[ --with-log-dir specify directory for log files other than [VAR_]PREFIX/logs])
+case "$with_log_dir" in
+ yes|no|"") LOG_DIR="$VAR_PREFIX/logs";;
+ *) LOG_DIR=$with_log_dir;;
+esac
+AC_MSG_RESULT($LOG_DIR)
+
+# Get the pid directory
+AC_SUBST(PID_DIR)
+AC_MSG_CHECKING(for --with-pid-dir)
+AC_ARG_WITH(pid-dir, dnl
+[ --with-pid-dir specify directory for the pid file other than [VAR_]PREFIX/data])
+case "$with_pid_dir" in
+ yes|no|"") PID_DIR="$VAR_PREFIX/data";;
+ *) PID_DIR=$with_pid_dir;;
+esac
+AC_MSG_RESULT($PID_DIR)
+
+# Get the queue directory
+AC_SUBST(QUEUE_DIR)
+AC_MSG_CHECKING(for --with-queue-dir)
+AC_ARG_WITH(queue-dir, dnl
+[ --with-queue-dir specify directory for queue files other than [VAR_]PREFIX/qfiles])
+case "$with_queue_dir" in
+ yes|no|"") QUEUE_DIR="$VAR_PREFIX/qfiles";;
+ *) QUEUE_DIR=$with_queue_dir;;
+esac
+AC_MSG_RESULT($QUEUE_DIR)
+
+
# new macro for finding group names
# returns a comma separated list of quoted group names
# the list is returned in the same order as specified with any duplicates removed
mailman-2.1.10-LC_CTYPE.patch:
--- NEW FILE mailman-2.1.10-LC_CTYPE.patch ---
diff -up mailman-2.1.10/bin/cleanarch.lctype mailman-2.1.10/bin/cleanarch
--- mailman-2.1.10/bin/cleanarch.lctype 2008-04-21 20:28:22.000000000 +0200
+++ mailman-2.1.10/bin/cleanarch 2008-05-12 13:37:11.000000000 +0200
@@ -53,7 +53,7 @@ import getopt
import mailbox
import paths
-from Mailman.i18n import _
+from Mailman.i18n import C_
cre = re.compile(mailbox.UnixMailbox._fromlinepattern)
@@ -69,7 +69,7 @@ def usage(code, msg=''):
fd = sys.stderr
else:
fd = sys.stdout
- print >> fd, _(__doc__)
+ print >> fd, C_(__doc__)
if msg:
print >> fd, msg
sys.exit(code)
@@ -80,7 +80,7 @@ def escape_line(line, lineno, quiet, out
if output:
sys.stdout.write('>' + line)
if not quiet:
- print >> sys.stderr, _('Unix-From line changed: %(lineno)d')
+ print >> sys.stderr, C_('Unix-From line changed: %(lineno)d')
print >> sys.stderr, line[:-1]
@@ -108,7 +108,7 @@ def main():
try:
status = int(arg)
except ValueError:
- usage(1, _('Bad status number: %(arg)s'))
+ usage(1, C_('Bad status number: %(arg)s'))
if args:
usage(1)
@@ -164,7 +164,7 @@ def main():
print >> sys.stderr
statuscnt = 0
prevline = line
- print >> sys.stderr, _('%(messages)d messages found')
+ print >> sys.stderr, C_('%(messages)d messages found')
diff -up mailman-2.1.10/bin/arch.lctype mailman-2.1.10/bin/arch
--- mailman-2.1.10/bin/arch.lctype 2008-04-21 20:28:22.000000000 +0200
+++ mailman-2.1.10/bin/arch 2008-05-12 13:37:11.000000000 +0200
@@ -70,7 +70,7 @@ from Mailman.Archiver.HyperArch import H
from Mailman.LockFile import LockFile
from Mailman import i18n
-_ = i18n._
+C_ = i18n.C_
PROGRAM = sys.argv[0]
i18n.set_language(mm_cfg.DEFAULT_SERVER_LANGUAGE)
@@ -82,7 +82,7 @@ def usage(code, msg=''):
fd = sys.stderr
else:
fd = sys.stdout
- print >> fd, _(__doc__)
+ print >> fd, C_(__doc__)
if msg:
print >> fd, msg
sys.exit(code)
@@ -122,7 +122,7 @@ def main():
# grok arguments
if len(args) < 1:
- usage(1, _('listname is required'))
+ usage(1, C_('listname is required'))
listname = args[0].lower().strip()
if len(args) < 2:
@@ -140,7 +140,7 @@ def main():
try:
mlist = MailList(listname)
except Errors.MMListError, e:
- usage(2, _('No such list "%(listname)s"\n%(e)s'))
+ usage(2, C_('No such list "%(listname)s"\n%(e)s'))
if mbox is None:
mbox = mlist.ArchiveFileName()
@@ -180,7 +180,7 @@ def main():
try:
fp = open(mbox)
except IOError, msg:
- usage(3, _('Cannot open mbox file %(mbox)s: %(msg)s'))
+ usage(3, C_('Cannot open mbox file %(mbox)s: %(msg)s'))
archiver = HyperArchive(mlist)
archiver.VERBOSE = verbose
diff -up mailman-2.1.10/bin/config_list.lctype mailman-2.1.10/bin/config_list
--- mailman-2.1.10/bin/config_list.lctype 2008-04-21 20:28:22.000000000 +0200
+++ mailman-2.1.10/bin/config_list 2008-05-12 13:37:11.000000000 +0200
@@ -76,6 +76,7 @@ from Mailman import Errors
from Mailman import i18n
_ = i18n._
+C_ = i18n.C_
NL = '\n'
nonasciipat = re.compile(r'[\x80-\xff]')
@@ -87,7 +88,7 @@ def usage(code, msg=''):
fd = sys.stderr
else:
fd = sys.stdout
- print >> fd, _(__doc__)
+ print >> fd, C_(__doc__)
if msg:
print >> fd, msg
sys.exit(code)
@@ -106,7 +107,7 @@ def do_output(listname, outfile):
try:
mlist = MailList.MailList(listname, lock=0)
except Errors.MMListError:
- usage(1, _('No such list: %(listname)s'))
+ usage(1, C_('No such list: %(listname)s'))
# Preamble for the config info. PEP263 charset and capture time.
language = mlist.preferred_language
charset = Utils.GetCharSet(language)
@@ -114,7 +115,7 @@ def do_output(listname, outfile):
if not charset:
charset = 'us-ascii'
when = time.ctime(time.time())
- print >> outfp, _('''\
+ print >> outfp, C_('''\
# -*- python -*-
# -*- coding: %(charset)s -*-
## "%(listname)s" mailing list configuration settings
@@ -140,7 +141,7 @@ def do_list_categories(mlist, k, subcat,
if info is None:
return
charset = Utils.GetCharSet(mlist.preferred_language)
- print >> outfp, '##', k.capitalize(), _('options')
+ print >> outfp, '##', k.capitalize(), C_('options')
print >> outfp, '#'
# First, massage the descripton text, which could have obnoxious
# leading whitespace on second and subsequent lines due to
@@ -199,7 +200,7 @@ def do_list_categories(mlist, k, subcat,
outfp.write('"""\n')
elif vtype in (mm_cfg.Radio, mm_cfg.Toggle):
print >> outfp, '#'
- print >> outfp, '#', _('legal values are:')
+ print >> outfp, '#', C_('legal values are:')
# TBD: This is disgusting, but it's special cased
# everywhere else anyway...
if varname == 'subscribe_policy' and \
@@ -253,7 +254,7 @@ def do_input(listname, infile, checkonly
try:
mlist = MailList.MailList(listname, lock=not checkonly)
except Errors.MMListError, e:
- usage(1, _('No such list "%(listname)s"\n%(e)s'))
+ usage(1, C_('No such list "%(listname)s"\n%(e)s'))
savelist = 0
guibyprop = getPropertyMap(mlist)
try:
@@ -266,16 +267,16 @@ def do_input(listname, infile, checkonly
if k in ('mlist', '__builtins__'):
continue
if not hasattr(mlist, k):
- print >> sys.stderr, _('attribute "%(k)s" ignored')
+ print >> sys.stderr, C_('attribute "%(k)s" ignored')
continue
if verbose:
- print >> sys.stderr, _('attribute "%(k)s" changed')
+ print >> sys.stderr, C_('attribute "%(k)s" changed')
missing = []
gui, wtype = guibyprop.get(k, (missing, missing))
if gui is missing:
# This isn't an official property of the list, but that's
# okay, we'll just restore it the old fashioned way
- print >> sys.stderr, _('Non-standard property restored: %(k)s')
+ print >> sys.stderr, C_('Non-standard property restored: %(k)s')
setattr(mlist, k, v)
else:
# BAW: This uses non-public methods. This logic taken from
@@ -283,9 +284,9 @@ def do_input(listname, infile, checkonly
try:
validval = gui._getValidValue(mlist, k, wtype, v)
except ValueError:
- print >> sys.stderr, _('Invalid value for property: %(k)s')
+ print >> sys.stderr, C_('Invalid value for property: %(k)s')
except Errors.EmailAddressError:
- print >> sys.stderr, _(
+ print >> sys.stderr, C_(
'Bad email address for option %(k)s: %(v)s')
else:
# BAW: Horrible hack, but then this is special cased
@@ -342,13 +343,13 @@ def main():
# sanity check
if infile is not None and outfile is not None:
- usage(1, _('Only one of -i or -o is allowed'))
+ usage(1, C_('Only one of -i or -o is allowed'))
[...2127 lines suppressed...]
@@ -127,7 +127,7 @@ def dolist(mlist, options):
digest = 0
else:
if not options.quiet:
- print _(' address not found:'), options.fromaddr
+ print C_(' address not found:'), options.fromaddr
return
# Check for banned to address.
pattern = mlist.GetBannedPattern(options.toaddr)
@@ -142,13 +142,13 @@ def dolist(mlist, options):
mlist.changeMemberAddress(options.fromaddr, options.toaddr,
not options.remove)
if not options.quiet:
- print _(' clone address added:'), options.toaddr
+ print C_(' clone address added:'), options.toaddr
except Errors.MMAlreadyAMember:
if not options.quiet:
- print _(' clone address is already a member:'), options.toaddr
+ print C_(' clone address is already a member:'), options.toaddr
if options.remove:
- print _(' original address removed:'), options.fromaddr
+ print C_(' original address removed:'), options.fromaddr
@@ -199,7 +199,7 @@ def main():
try:
Utils.ValidateEmail(toaddr)
except Errors.EmailAddressError:
- usage(1, _('Not a valid email address: %(toaddr)s'))
+ usage(1, C_('Not a valid email address: %(toaddr)s'))
lfromaddr = fromaddr.lower()
options.toaddr = toaddr
options.fromaddr = fromaddr
@@ -212,7 +212,7 @@ def main():
try:
mlist = MailList.MailList(listname)
except Errors.MMListError, e:
- print _('Error opening list "%(listname)s", skipping.\n%(e)s')
+ print C_('Error opening list "%(listname)s", skipping.\n%(e)s')
continue
try:
dolist(mlist, options)
diff -up mailman-2.1.10/Mailman/MTA/Postfix.py.lctype mailman-2.1.10/Mailman/MTA/Postfix.py
--- mailman-2.1.10/Mailman/MTA/Postfix.py.lctype 2008-05-12 13:37:11.000000000 +0200
+++ mailman-2.1.10/Mailman/MTA/Postfix.py 2008-05-12 13:37:11.000000000 +0200
@@ -27,7 +27,7 @@ from stat import *
from Mailman import mm_cfg
from Mailman import Utils
from Mailman import LockFile
-from Mailman.i18n import _
+from Mailman.i18n import C_
from Mailman.MTA.Utils import makealiases
from Mailman.Logging.Syslog import syslog
@@ -303,7 +303,7 @@ def checkperms(state):
targetmode = S_IFREG | S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP
for file in ALIASFILE, VIRTFILE:
if state.VERBOSE:
- print _('checking permissions on %(file)s')
+ print C_('checking permissions on %(file)s')
stat = None
try:
stat = os.stat(file)
@@ -313,9 +313,9 @@ def checkperms(state):
if stat and (stat[ST_MODE] & targetmode) <> targetmode:
state.ERRORS += 1
octmode = oct(stat[ST_MODE])
- print _('%(file)s permissions must be 066x (got %(octmode)s)'),
+ print C_('%(file)s permissions must be 066x (got %(octmode)s)'),
if state.FIX:
- print _('(fixing)')
+ print C_('(fixing)')
os.chmod(file, stat[ST_MODE] | targetmode)
else:
print
@@ -331,7 +331,7 @@ def checkperms(state):
raise
continue
if state.VERBOSE:
- print _('checking ownership of %(dbfile)s')
+ print C_('checking ownership of %(dbfile)s')
user = mm_cfg.MAILMAN_USER
ownerok = stat[ST_UID] == pwd.getpwnam(user)[2]
if not ownerok:
@@ -339,10 +339,10 @@ def checkperms(state):
owner = pwd.getpwuid(stat[ST_UID])[0]
except KeyError:
owner = 'uid %d' % stat[ST_UID]
- print _('%(dbfile)s owned by %(owner)s (must be owned by %(user)s'),
+ print C_('%(dbfile)s owned by %(owner)s (must be owned by %(user)s'),
state.ERRORS += 1
if state.FIX:
- print _('(fixing)')
+ print C_('(fixing)')
uid = pwd.getpwnam(user)[2]
gid = grp.getgrnam(mm_cfg.MAILMAN_GROUP)[2]
os.chown(dbfile, uid, gid)
diff -up mailman-2.1.10/Mailman/MTA/Manual.py.lctype mailman-2.1.10/Mailman/MTA/Manual.py
--- mailman-2.1.10/Mailman/MTA/Manual.py.lctype 2008-04-21 20:28:22.000000000 +0200
+++ mailman-2.1.10/Mailman/MTA/Manual.py 2008-05-12 13:37:11.000000000 +0200
@@ -25,7 +25,7 @@ from Mailman import mm_cfg
from Mailman import Message
from Mailman import Utils
from Mailman.Queue.sbcache import get_switchboard
-from Mailman.i18n import _
+from Mailman.i18n import _, C_
from Mailman.MTA.Utils import makealiases
try:
@@ -74,12 +74,12 @@ Here are the entries for the /etc/aliase
outfp = sfp
else:
if not quiet:
- print _("""\
+ print C_("""\
To finish creating your mailing list, you must edit your /etc/aliases (or
equivalent) file by adding the following lines, and possibly running the
`newaliases' program:
""")
- print _("""\
+ print C_("""\
## %(listname)s mailing list""")
outfp = sys.stdout
# Common path
@@ -120,7 +120,7 @@ Here are the entries in the /etc/aliases
""")
outfp = sfp
else:
- print _("""
+ print C_("""
To finish removing your mailing list, you must edit your /etc/aliases (or
equivalent) file by removing the following lines, and possibly running the
`newaliases' program:
diff -up mailman-2.1.10/Mailman/i18n.py.lctype mailman-2.1.10/Mailman/i18n.py
--- mailman-2.1.10/Mailman/i18n.py.lctype 2008-04-21 20:28:22.000000000 +0200
+++ mailman-2.1.10/Mailman/i18n.py 2008-05-12 13:37:11.000000000 +0200
@@ -15,6 +15,7 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
# USA.
+import locale
import sys
import time
import gettext
@@ -25,6 +26,15 @@ from Mailman.SafeDict import SafeDict
_translation = None
+
+def _get_ctype_charset():
+ old = locale.setlocale(locale.LC_CTYPE, '')
+ charset = locale.nl_langinfo(locale.CODESET)
+ locale.setlocale(locale.LC_CTYPE, old)
+ return charset
+
+_ctype_charset = _get_ctype_charset()
+
def set_language(language=None):
@@ -54,7 +64,7 @@ if _translation is None:
-def _(s):
+def _(s, frame = 1):
if s == '':
return s
assert s
@@ -70,7 +80,7 @@ def _(s):
# original string is 1) locals dictionary, 2) globals dictionary.
#
# First, get the frame of the caller
- frame = sys._getframe(1)
+ frame = sys._getframe(frame)
# A `safe' dictionary is used so we won't get an exception if there's a
# missing key in the dictionary.
dict = SafeDict(frame.f_globals.copy())
@@ -91,6 +101,19 @@ def _(s):
+def tolocale(s):
+ global _ctype_charset
+ if isinstance(s, UnicodeType):
+ return s
+ source = _translation.charset ()
+ if not source:
+ return s
+ return unicode(s, source, 'replace').encode(_ctype_charset, 'replace')
+
+def C_(s):
+ return tolocale(_(s, 2))
+
+
def ctime(date):
# Don't make these module globals since we have to do runtime translation
# of the strings anyway.
mailman-2.1.10-archive-reply.patch:
--- NEW FILE mailman-2.1.10-archive-reply.patch ---
--- mailman/templates/en/article.html.orig 2005-10-23 07:21:04.000000000 -0400
+++ mailman/templates/en/article.html 2005-10-23 07:27:08.000000000 -0400
@@ -4,7 +4,7 @@
<TITLE> %(title)s
</TITLE>
<LINK REL="Index" HREF="index.html" >
- <LINK REL="made" HREF="mailto:%(email_url)s?Subject=%(subject_url)s&In-Reply-To=%(in_reply_to_url)s">
+ <LINK REL="made" HREF="mailto:%(email_url)s?Subject=Re:%%20%(subject_url)s&In-Reply-To=%(in_reply_to_url)s">
<META NAME="robots" CONTENT="index,nofollow">
%(encoding)s
%(prev)s
@@ -13,7 +13,7 @@
<BODY BGCOLOR="#ffffff">
<H1>%(subject_html)s</H1>
<B>%(author_html)s</B>
- <A HREF="mailto:%(email_url)s?Subject=%(subject_url)s&In-Reply-To=%(in_reply_to_url)s"
+ <A HREF="mailto:%(email_url)s?Subject=Re:%%20%(subject_url)s&In-Reply-To=%(in_reply_to_url)s"
TITLE="%(subject_html)s">%(email_html)s
</A><BR>
<I>%(datestr_html)s</I>
mailman-2.1.10-cron.patch:
--- NEW FILE mailman-2.1.10-cron.patch ---
diff -up mailman-2.1.10/misc/mailman.in.cron mailman-2.1.10/misc/mailman.in
--- mailman-2.1.10/misc/mailman.in.cron 2008-05-12 13:22:24.000000000 +0200
+++ mailman-2.1.10/misc/mailman.in 2008-05-12 13:22:24.000000000 +0200
@@ -24,18 +24,48 @@
# On Debian, type "update-rc.d mailman defaults"
# On RedHat, and derivatives, install with "chkconfig --add mailman"
#
-# chkconfig: 2345 98 12
+# chkconfig: - 98 12
# description: Mailman is the GNU Mailing List Manager, a program that \
# manages electronic mail discussion groups. For more \
# on GNU Mailman see http://www.list.org
# processname: mailmanctl
# config: @prefix@/Mailman/mm_cfg.py
-# pidfile: @prefix@/data/master-qrunner.pid
+# pidfile: @PID_DIR@/master-qrunner.pid
PYTHON=@PYTHON@
MAILMANHOME=@prefix@
MAILMANCTL=$MAILMANHOME/bin/mailmanctl
+# We used to install the mailman cron jobs when the mailman rpm was
+# installed, irrespective of whether mailman was actually being
+# run. Although the cron jobs didn't create any problems if someone
+# wasn't running mailman some users complained about the cron log file
+# filling up, resource usage, and power consumption since systems
+# wouldn't really idle. It really only makes sense to run the mailman
+# cron jobs if the mailman service is turned on and not just merely
+# having the rpm installed. This init.d script is an obvious place to
+# install or remove the cron jobs based on the service being enabled
+# or not.
+
+SRC_CRON_SCRIPT=$MAILMANHOME/cron/crontab.in
+DST_CRON_SCRIPT=/etc/cron.d/mailman
+
+function InstallCron()
+{
+ install -m644 -o root -g root $SRC_CRON_SCRIPT $DST_CRON_SCRIPT
+}
+
+function RemoveCron()
+{
+cat > $DST_CRON_SCRIPT <<EOF
+# DO NOT EDIT THIS FILE!
+#
+# Contents of this file managed by /etc/init.d/mailman
+# Master copy is @prefix@/cron/crontab.in
+# Consult that file for documentation
+EOF
+}
+
# Source function library.
. /etc/rc.d/init.d/functions
@@ -47,7 +77,11 @@ function start()
echo -n $"Starting $prog: "
daemon $PYTHON $MAILMANCTL -s -q start
RETVAL=$?
- [ $RETVAL -eq 0 ] && touch /var/lock/subsys/$prog
+ if [ $RETVAL -eq 0 ]
+ then
+ touch /var/lock/subsys/$prog
+ InstallCron
+ fi
echo
return $RETVAL
}
@@ -57,7 +91,11 @@ function stop()
echo -n $"Shutting down $prog: "
daemon $PYTHON $MAILMANCTL -q stop
RETVAL=$?
- [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$prog
+ if [ $RETVAL -eq 0 ]
+ then
+ rm -f /var/lock/subsys/$prog
+ RemoveCron
+ fi
echo
return $RETVAL
}
@@ -101,5 +139,9 @@ case "$1" in
RETVAL=$?
;;
+*)
+ echo $"Usage: $prog {start|stop|restart|condrestart|status}"
+ ;;
+
esac
exit $RETVAL
diff -up mailman-2.1.10/cron/senddigests.cron mailman-2.1.10/cron/senddigests
--- mailman-2.1.10/cron/senddigests.cron 2008-05-12 13:22:51.000000000 +0200
+++ mailman-2.1.10/cron/senddigests 2008-05-12 13:23:01.000000000 +0200
@@ -1,4 +1,4 @@
-#! /usr/bin/python
+#! /usr/bin/python -S
#
# Copyright (C) 1998-2007 by the Free Software Foundation, Inc.
#
diff -up mailman-2.1.10/cron/nightly_gzip.cron mailman-2.1.10/cron/nightly_gzip
--- mailman-2.1.10/cron/nightly_gzip.cron 2008-04-21 20:28:22.000000000 +0200
+++ mailman-2.1.10/cron/nightly_gzip 2008-05-12 13:22:24.000000000 +0200
@@ -1,4 +1,4 @@
-#! @PYTHON@
+#! @PYTHON@ -S
#
# Copyright (C) 1998,1999,2000,2001,2002 by the Free Software Foundation, Inc.
#
diff -up mailman-2.1.10/cron/gate_news.cron mailman-2.1.10/cron/gate_news
--- mailman-2.1.10/cron/gate_news.cron 2008-04-21 20:28:22.000000000 +0200
+++ mailman-2.1.10/cron/gate_news 2008-05-12 13:22:24.000000000 +0200
@@ -1,4 +1,4 @@
-#! @PYTHON@
+#! @PYTHON@ -S
#
# Copyright (C) 1998-2003 by the Free Software Foundation, Inc.
#
diff -up mailman-2.1.10/cron/checkdbs.cron mailman-2.1.10/cron/checkdbs
--- mailman-2.1.10/cron/checkdbs.cron 2008-04-21 20:28:22.000000000 +0200
+++ mailman-2.1.10/cron/checkdbs 2008-05-12 13:22:24.000000000 +0200
@@ -1,4 +1,4 @@
-#! @PYTHON@
+#! @PYTHON@ -S
#
# Copyright (C) 1998-2003 by the Free Software Foundation, Inc.
#
diff -up mailman-2.1.10/cron/crontab.in.in.cron mailman-2.1.10/cron/crontab.in.in
--- mailman-2.1.10/cron/crontab.in.in.cron 2008-04-21 20:28:22.000000000 +0200
+++ mailman-2.1.10/cron/crontab.in.in 2008-05-12 13:22:24.000000000 +0200
@@ -1,24 +1,47 @@
+#
+# -- WARNING -- WARNING -- WARNING -- WARNING -- WARNING -- WARNING --
+# ------------------ EDIT THE CORRECT FILE -------------------------
+#
+# This file is copied to /etc/cron.d/mailman from
+# @prefix@/cron/crontab.in when the mailman service is started via its
+# init.d script and the file /etc/cron.d/mailman is removed when the
+# service is stopped. Therefore any edits made directly to
+# /etc/cron.d/mailman will be lost anytime the mailman service
+# restarts.
+#
+# To make changes edit the master copy @prefix@/cron/crontab.in and then
+# restart the service to pick up the changes (/sbin/service mailman restart).
+#
+# The reason this is done this way is because the mailman cron jobs
+# should only be invoked if the mailman service is enabled and not
+# just as a consequence of installing the rpm as was the case
+# previously. The file /etc/cron.d/mailman cannot simply be linked to
+# the master copy in @prefix@/cron because for security reasons cron
+# will not process crontab files that are links or writeable by
+# anybody else but root, thus the file must be copied into /etc/cron.d
+# with the right ownership and permissions.
+#
# At 8AM every day, mail reminders to admins as to pending requests.
# They are less likely to ignore these reminders if they're mailed
# early in the morning, but of course, this is local time... ;)
-0 8 * * * @PYTHON@ -S @prefix@/cron/checkdbs
+0 8 * * * @MAILMAN_USER@ @prefix@/cron/checkdbs
#
# At 9AM, send notifications to disabled members that are due to be
# reminded to re-enable their accounts.
-0 9 * * * @PYTHON@ -S @prefix@/cron/disabled
+0 9 * * * @MAILMAN_USER@ @prefix@/cron/disabled
#
# Noon, mail digests for lists that do periodic as well as threshhold delivery.
-0 12 * * * @PYTHON@ -S @prefix@/cron/senddigests
+0 12 * * * @MAILMAN_USER@ @prefix@/cron/senddigests
#
# 5 AM on the first of each month, mail out password reminders.
-0 5 1 * * @PYTHON@ -S @prefix@/cron/mailpasswds
+0 5 1 * * @MAILMAN_USER@ @prefix@/cron/mailpasswds
#
# Every 5 mins, try to gate news to mail. You can comment this one out
# if you don't want to allow gating, or don't have any going on right now,
# or want to exclusively use a callback strategy instead of polling.
-0,5,10,15,20,25,30,35,40,45,50,55 * * * * @PYTHON@ -S @prefix@/cron/gate_news
+0,5,10,15,20,25,30,35,40,45,50,55 * * * * @MAILMAN_USER@ @prefix@/cron/gate_news
#
# At 3:27am every night, regenerate the gzip'd archive file. Only
# turn this on if the internal archiver is used and
# GZIP_ARCHIVE_TXT_FILES is false in mm_cfg.py
-27 3 * * * @PYTHON@ -S @prefix@/cron/nightly_gzip
+27 3 * * * @MAILMAN_USER@ @prefix@/cron/nightly_gzip
diff -up mailman-2.1.10/cron/mailpasswds.cron mailman-2.1.10/cron/mailpasswds
--- mailman-2.1.10/cron/mailpasswds.cron 2008-04-21 20:28:22.000000000 +0200
+++ mailman-2.1.10/cron/mailpasswds 2008-05-12 13:22:24.000000000 +0200
@@ -1,4 +1,4 @@
-#! @PYTHON@
+#! @PYTHON@ -S
#
# Copyright (C) 1998-2003 by the Free Software Foundation, Inc.
#
diff -up mailman-2.1.10/cron/disabled.cron mailman-2.1.10/cron/disabled
--- mailman-2.1.10/cron/disabled.cron 2008-04-21 20:28:22.000000000 +0200
+++ mailman-2.1.10/cron/disabled 2008-05-12 13:22:24.000000000 +0200
@@ -1,4 +1,4 @@
-#! @PYTHON@
+#! @PYTHON@ -S
#
# Copyright (C) 2001-2007 by the Free Software Foundation, Inc.
#
diff -up mailman-2.1.10/cron/bumpdigests.cron mailman-2.1.10/cron/bumpdigests
--- mailman-2.1.10/cron/bumpdigests.cron 2008-04-21 20:28:22.000000000 +0200
+++ mailman-2.1.10/cron/bumpdigests 2008-05-12 13:22:24.000000000 +0200
@@ -1,4 +1,4 @@
-#! @PYTHON@
+#! @PYTHON@ -S
#
# Copyright (C) 1998,1999,2000,2001,2002 by the Free Software Foundation, Inc.
#
mailman-2.1.10-ctypefix.patch:
--- NEW FILE mailman-2.1.10-ctypefix.patch ---
diff -up mailman-2.1.10/bin/withlist.ctypefix mailman-2.1.10/bin/withlist
--- mailman-2.1.10/bin/withlist.ctypefix 2008-05-12 13:55:34.000000000 +0200
+++ mailman-2.1.10/bin/withlist 2008-05-12 13:58:11.000000000 +0200
@@ -128,7 +128,10 @@ import paths
from Mailman import Errors
from Mailman import MailList
from Mailman import Utils
-from Mailman.i18n import _
+from Mailman import i18n
+
+_ = i18n._
+C_ = i18n.C_
try:
True, False
Index: .cvsignore
===================================================================
RCS file: /cvs/pkgs/rpms/mailman/devel/.cvsignore,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -r1.16 -r1.17
--- .cvsignore 25 Sep 2006 13:06:58 -0000 1.16
+++ .cvsignore 13 May 2008 08:32:25 -0000 1.17
@@ -1 +1 @@
-mailman-2.1.9.tgz
+mailman-2.1.10.tgz
mailman-2.1.9-ctypo-new.patch:
Index: mailman-2.1.9-ctypo-new.patch
===================================================================
RCS file: /cvs/pkgs/rpms/mailman/devel/mailman-2.1.9-ctypo-new.patch,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- mailman-2.1.9-ctypo-new.patch 24 Oct 2007 14:10:31 -0000 1.1
+++ mailman-2.1.9-ctypo-new.patch 13 May 2008 08:32:26 -0000 1.2
@@ -58,26 +58,6 @@
os.unlink(pckfile)
finally:
if msgfp:
---- mailman-2.1.9/bin/withlist.ctypo 2007-08-27 13:27:11.000000000 +0200
-+++ mailman-2.1.9/bin/withlist 2007-08-27 13:27:11.000000000 +0200
-@@ -127,7 +127,7 @@
- from Mailman import Errors
- from Mailman import MailList
- from Mailman import Utils
--from Mailman.i18n import _
-+from Mailman.i18n import C_
-
- try:
- True, False
-@@ -286,7 +286,7 @@
- namespace = globals().copy()
- namespace.update(locals())
- if dolist:
-- ban = _("The variable `m' is the %(listname)s MailList instance")
-+ ban = C_("The variable `m' is the %(listname)s MailList instance")
- else:
- ban = None
- code.InteractiveConsole(namespace).interact(ban)
--- mailman-2.1.9/bin/newlist.ctypo 2007-08-27 13:27:11.000000000 +0200
+++ mailman-2.1.9/bin/newlist 2007-08-27 13:27:11.000000000 +0200
@@ -243,7 +243,7 @@
Index: mailman.spec
===================================================================
RCS file: /cvs/pkgs/rpms/mailman/devel/mailman.spec,v
retrieving revision 1.69
retrieving revision 1.70
diff -u -r1.69 -r1.70
--- mailman.spec 5 Feb 2008 12:59:48 -0000 1.69
+++ mailman.spec 13 May 2008 08:32:26 -0000 1.70
@@ -1,7 +1,7 @@
Summary: Mailing list manager with built in Web access
Name: mailman
-Version: 2.1.9
-Release: 10%{?dist}
+Version: 2.1.10
+Release: 1%{?dist}
Epoch: 3
Group: Applications/Internet
#Source0: ftp://ftp.gnu.org/pub/gnu/mailman/mailman-%{version}.tgz
@@ -12,24 +12,21 @@
Source5: mailman.INSTALL.REDHAT.in
Source6: mailman-crontab-edit
Source7: mailman-migrate-fhs
+
Patch1: mailman-2.1-multimail.patch
Patch2: mailman-2.1-build.patch
Patch3: mailman-2.1-mailmanctl-status.patch
-Patch4: mailman-cron.patch
-Patch5: mailman-FHS.patch
+Patch4: mailman-2.1.10-cron.patch
+Patch5: mailman-2.1.10-FHS.patch
Patch6: mailman-python-compile.patch
-Patch7: mailman-init.patch
-Patch8: mailman-archive-reply.patch
-Patch9: mailman-2.1.9-LC_CTYPE.patch
-Patch10: mailman-2.1.9-ctypo-new.patch
-Patch11: mailman-2.1.9-init-retval.patch
-# Disabled until included in upstream
-#Patch12: mailman-2.1.9-inotify.patch
-Patch13: mailman-2.1.9-ctypefix.patch
-Patch14: mailman-2.1.9-header-folding.patch
-Patch15: mailman-2.1.9-selinux.patch
-Patch16: mailman-2.1.9-unicode.patch
-Patch17: mailman-2.1.9-cve-2008-0564.patch
+Patch7: mailman-2.1.10-archive-reply.patch
+Patch8: mailman-2.1.10-LC_CTYPE.patch
+Patch9: mailman-2.1.9-ctypo-new.patch
+Patch10: mailman-2.1.9-init-retval.patch
+Patch11: mailman-2.1.10-ctypefix.patch
+Patch12: mailman-2.1.9-header-folding.patch
+Patch13: mailman-2.1.9-selinux.patch
+Patch14: mailman-2.1.9-unicode.patch
License: GPLv2+
URL: http://www.list.org/
@@ -79,7 +76,7 @@
# The mail wrapper program
%define mail_wrapper mailman
-%description
+%description
Mailman is software to help manage email discussion lists, much like
Majordomo and Smartmail. Unlike most similar products, Mailman gives
each mailing list a webpage, and allows users to subscribe,
@@ -102,17 +99,14 @@
%patch4 -p1 -b .cron
%patch5 -p1 -b .FHS
%patch6 -p1 -b .python-compile
-%patch7 -p1 -b .inithelp
-%patch8 -p1 -b .archive-in-reply-to
-%patch9 -p1 -b .lctype
-%patch10 -p1 -b .ctypo
-%patch11 -p1 -b .retval
-#%patch12 -p1 -b .inotify
-%patch13 -p1 -b .ctypefix
-%patch14 -p0 -b .header
-%patch15 -p1 -b .selinux
-%patch16 -p1 -b .unicode
-%patch17 -p0 -b .cve-2008-0564
+%patch7 -p1 -b .archive-in-reply-to
+%patch8 -p1 -b .lctype
+%patch9 -p1 -b .ctypo
+%patch10 -p1 -b .retval
+%patch11 -p1 -b .ctypefix
+%patch12 -p0 -b .header
+%patch13 -p1 -b .selinux
+%patch14 -p1 -b .unicode
#cp $RPM_SOURCE_DIR/mailman.INSTALL.REDHAT.in INSTALL.REDHAT.in
cp %{SOURCE5} INSTALL.REDHAT.in
@@ -236,7 +230,7 @@
cp -r %{mmbuilddir}/contrib $RPM_BUILD_ROOT%{docdir}
install -m644 %{SOURCE7} $RPM_BUILD_ROOT%{docdir}/contrib/migrate-fhs
install -m755 -d $RPM_BUILD_ROOT%{docdir}/admin
-cp -r %{mmbuilddir}/admin/www $RPM_BUILD_ROOT%{docdir}/admin
+cp -r %{mmbuilddir}/doc $RPM_BUILD_ROOT%{docdir}/admin
# remove dir/files from $RPM_BUILD_ROOT that we aren't shipping
rm -rf $RPM_BUILD_ROOT%{varmmdir}/icons
@@ -251,6 +245,12 @@
chmod 0755 $RPM_BUILD_ROOT/%{mmdir}/pythonlib/korean/c/hangul.so
chmod 0755 $RPM_BUILD_ROOT/%{mmdir}/pythonlib/korean/c/_koco.so
+# Directories...
+mkdir -p $RPM_BUILD_ROOT/%{lockdir}
+mkdir -p $RPM_BUILD_ROOT/%{logdir}
+mkdir -p $RPM_BUILD_ROOT/%{piddir}
+mkdir -p $RPM_BUILD_ROOT/%{queuedir}
+
%clean
rm -rf $RPM_BUILD_ROOT $RPM_BUILD_DIR/files.%{name}
@@ -352,6 +352,9 @@
%attr(0644,root,%{mmgroup}) %config(noreplace) %{mmdir}/cron/crontab.in
%changelog
+* Mon May 12 2008 Tomas Smetana <tsmetana at redhat.com> - 3:2.1.10-1
+- new upstream version
+
* Tue Feb 05 2008 Tomas Smetana <tsmetana at redhat.com> - 3:2.1.9-10
- patch for CVE-2008-0564; XSS triggerable by list administrator
Index: sources
===================================================================
RCS file: /cvs/pkgs/rpms/mailman/devel/sources,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -r1.16 -r1.17
--- sources 25 Sep 2006 13:06:58 -0000 1.16
+++ sources 13 May 2008 08:32:26 -0000 1.17
@@ -1 +1 @@
-dd51472470f9eafb04f64da372444835 mailman-2.1.9.tgz
+79157d337a29f716a3a1ff8b70501f8d mailman-2.1.10.tgz
--- mailman-2.1-permissions.patch DELETED ---
--- mailman-2.1.5-date_overflows.patch DELETED ---
--- mailman-2.1.9-ctypefix.patch DELETED ---
--- mailman-2.1.9-ctypo.patch DELETED ---
--- mailman-2.1.9-cve-2008-0564.patch DELETED ---
--- mailman-2.1.9-inotify.patch DELETED ---
--- mailman-FHS.patch DELETED ---
--- mailman-archive-reply.patch DELETED ---
--- mailman-cron.patch DELETED ---
--- mailman-init.patch DELETED ---
More information about the fedora-extras-commits
mailing list