summaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
authorBarry Warsaw2009-08-24 08:45:16 -0400
committerBarry Warsaw2009-08-24 08:45:16 -0400
commitf761b80526bc19eb21db6c6461c3675ecc850df2 (patch)
treef3aabbb976f3355bd76beaa37d8b54858ff2fbf3 /docs
parent7c918b077b844fc174240392138692b4b0efc629 (diff)
downloadmailman-f761b80526bc19eb21db6c6461c3675ecc850df2.tar.gz
mailman-f761b80526bc19eb21db6c6461c3675ecc850df2.tar.zst
mailman-f761b80526bc19eb21db6c6461c3675ecc850df2.zip
Documentation reorganization and update.
Diffstat (limited to 'docs')
-rw-r--r--docs/ACKNOWLEDGMENTS.txt252
-rw-r--r--docs/ALPHA.txt92
-rw-r--r--docs/NEWS.txt268
-rw-r--r--docs/OLD-NEWS.txt2835
-rw-r--r--docs/STYLEGUIDE.txt151
-rw-r--r--docs/gnu-COPYING-GPL340
-rw-r--r--docs/man/add_members.160
-rw-r--r--docs/man/check_db.160
-rw-r--r--docs/man/check_perms.146
-rw-r--r--docs/man/clone_member.171
-rw-r--r--docs/man/find_member.164
-rw-r--r--docs/man/list_members.178
-rw-r--r--docs/man/remove_members.163
-rw-r--r--docs/man/sync_members.181
-rw-r--r--docs/man/transcheck.141
-rw-r--r--docs/posting-flow-chart.ps735
16 files changed, 0 insertions, 5237 deletions
diff --git a/docs/ACKNOWLEDGMENTS.txt b/docs/ACKNOWLEDGMENTS.txt
deleted file mode 100644
index 321470388..000000000
--- a/docs/ACKNOWLEDGMENTS.txt
+++ /dev/null
@@ -1,252 +0,0 @@
-Mailman - The GNU Mailing List Management System
-Copyright (C) 1998-2007 by the Free Software Foundation, Inc.
-51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
-
-The following folks are or have been core developers of Mailman (in reverse
-alphabetical order):
-
- Barry Warsaw, Mailman's yappy guard dog
- Thomas Wouters, Mailman's Dutch treat
- John Viega, Mailman's inventor
- Mark Sapiro, Mailman's compulsive responder
- Harald Meland, Norse Mailman
- Ken Manheimer, Mailman's savior
- Tokio Kikuchi, Mailman's weatherman
- Scott Cotton, Cookie-Monster
-
-They can be contacted directly via mailman-cabal@python.org.
-
-Here is the list of other contributors who have donated large bits of
-code, and have assigned copyright for contributions to the FSF:
-
- Juan Carlos Rey Anaya
- Richard Barrett
- Stephan Berndts
- Norbert Bollow
- Ben Gertzfield
- Victoriano Giralt
- Mads Kiilerich
- The Dragon De Monsyne
- Les Niles
- Terri Oda
- Simone Piunno
-
-Thanks also go to the following people for their important contributions in
-other aspects of the Mailman project:
-
- Brad Knowles
- JC Dill
-
-Thanks also to Dragon for his winning Mailman logo contribution, and
-to Terri Oda for the neat shortcut icon and the member documentation.
-
-Control.com sponsored development of several Mailman 2.1 features,
-including topics filters, external membership sources, and initial
-virtual mailing list support. My thanks especially to Dan Pierson and
-Ken Crater from Control.com.
-
-Here is the list of other people who have contributed useful ideas,
-suggestions, bug fixes, testing, etc., or who have been very helpful
-in answering questions on mailman-users.
-
- David Abrahams
- William Ahern
- Terry Allen
- Jose Paulo Moitinho de Almeida
- Sven Anderson
- Matthias Andree
- Anton Antonov
- Mike Avery
- Stonewall Ballard
- Moreno Baricevic
- Jeff Berliner
- Stuart Bishop
- David Blomquist
- Bojan
- Søren Bondrup
- Grant Bowman
- Alessio Bragadini
- J. D. Bronson
- Stan Bubrouski
- Daniel Buchmann
- Ben Burnett
- Ted Cabeen
- Mentor Cana
- John Carnes
- Julio A. Cartaya
- Claudio Cattazzo
- Donn Cave
- David Champion
- Hye-Shik Chang
- Eric D. Christensen
- Tom G. Christensen
- Paul Cox
- Stefaniu Criste
- Robert Daeley
- Ned Dawes
- Emilio Delgado
- John Dennis
- Stefan Divjak
- Maximillian Dornseif
- Fred Drake
- Maxim Dzumanenko
- Piarres Beobide Egaña
- Rob Ellis
- Kerem Erkan
- Fil
- Patrick Finnerty
- Bob Fleck
- Erik Forsberg
- Darrell Fuhriman
- Robert Garrigós
- Carson Gaspar
- Pascal GEORGE
- Vadim Getmanshchuk
- David Gibbs
- Dmitri I GOULIAEV
- Terry Grace
- Federico Grau
- Pekka Haavisto
- David Habben
- Stig Hackvan
- Jeff Hahn
- Terry Hardie
- Paul Hebble
- Tollef Fog Heen
- Peer Heinlein
- James Henstridge
- Walter Hop
- Bert Hubert
- Henny Huisman
- Jeremy Hylton
- Ikeda Soji
- Rostyk Ivantsiv
- Ron Jarrell
- Matthias Juchem
- Tamito KAJIYAMA
- Nino Katic
- SHIGENO Kazutaka
- Ashley M. Kirchner
- Matthias Klose
- Harald Koch
- Patrick Koetter
- Eddie Kohler
- Chris Kolar
- Uros Kositer
- Andrew Kuchling
- Ricardo Kustner
- L'homme Moderne
- Sylvain Langlade
- Ed Lau
- J C Lawrence
- Greg Lindahl
- Christopher P. Lindsey
- Martin von Loewis
- Dario Lopez-Kästen
- Tanner Lovelace
- Jay Luker
- Gergely Madarasz
- Luca Maranzano
- John A. Martin
- Andrew Martynov
- Jason R. Mastaler
- Michael Mclay
- Michael Meltzer
- Marc MERLIN
- Nigel Metheringham
- Dan Mick
- Garey Mills
- Martin Mokrejs
- Michael Fischer v. Mollard
- David Martínez Moreno
- Dirk Mueller
- Jonas Muerer
- Erik Myllymaki
- Balazs Nagy
- Moritz Naumann
- Dale Newfield
- Hrvoje Niksic
- Les Niles
- Mike Noyes
- David B. O'Donnell
- Timothy O'Malley
- "office"
- Dan Ohnesorg
- Gerald Oskoboiny
- Eva Österlind
- Toni Panadès
- Jon Parise
- Chris Pepper
- Tim Peters
- Joe Peterson
- PieterB
- Rodolfo Pilas
- Skye Poier
- Martin Pool
- Don Porter
- Francesco Potortì
- Bob Puff
- Michael Ranner
- John Read
- Sean Reifschneider
- Christian Reis
- Ademar de Souza Reis, Jr.
- Bernhard Reiter
- Stephan Richter
- Tristan Roddis
- Heiko Rommel
- Luigi Rosa
- Guido van Rossum
- Nicholas Russo
- Chris Ryan
- Cabel Sasser
- Bartosz Sawicki
- Kai Schaetzl
- Karoly Segesdi
- Gleydson Mazioli da Silva
- Pasi Sjöholm
- Chris Snell
- Mikhail Sobolev
- Greg Stein
- Dale Stimson
- Students of HIT <mailman-cn@mail.cs.hit.edu.cn>
- Szabolcs Szigeti
- Vizi Szilard
- David T-G
- Owen Taylor
- Danny Terweij
- Jim Tittsler
- Todd (Freedom Lover)
- Roger Tsang
- Chuq Von Rospach
- Jens Vagelpohl
- Valia V. Vaneeva
- Anti Veeranna
- Todd Vierling
- Bill Wagner
- Greg Ward
- Mark Weaver
- Kathleen Webb
- Florian Weimer
- Ousmane Wilane
- Dan Wilder
- Seb Wills
- Dai Xiaoguang
- Ping Yeh
- YASUDA Yukihiro
- Michael Yount
- Blair Zajac
- Mikhail Zabaluev
- Noam Zeilberger
- Daniel Zeiss
- Todd Zullinger
-
-And everyone else on mailman-developers@python.org and
-mailman-users@python.org! Thank you, all.
-
-
-
-Local Variables:
-mode: indented-text
-indent-tabs-mode: nil
-End:
diff --git a/docs/ALPHA.txt b/docs/ALPHA.txt
deleted file mode 100644
index dec6a01a7..000000000
--- a/docs/ALPHA.txt
+++ /dev/null
@@ -1,92 +0,0 @@
-Mailman - The GNU Mailing List Management System
-Copyright (C) 2008-2009 by the Free Software Foundation, Inc.
-51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
-
-ALPHA RELEASE
-
- The Mailman 3 alpha releases are being provided to give developers and
- other interested people an early look at the next major version. As such,
- many things may not work yet. Your participation is encouraged. Your
- feedback and contributions are welcome. Please submit bug reports on the
- Mailman bug tracker at
-
- https://bugs.launchpad.net/mailman
-
- or on the mailman-developers mailing list.
-
-
-USING THE ALPHA
-
- Python 2.6 is required. It can either be the default 'python' on your
- $PATH or it can be accessible via the 'python2.6' binary. See
- http://www.python.org for details on getting Python 2.6.
-
- Mailman 3 is now based on the zc.buildout infrastructure, which greatly
- simplifies building and testing Mailman.
-
- This version of Mailman depends on an unofficial branch of the lazr.config
- package. This branch adds a number of useful features and fixes some
- bugs, but it is still under review and not yet part of the official
- package. Start by checking out this unofficial branch:
-
- % cd wherever
- % bzr branch lp:~barry/lazr.config/megamerge
-
- Now you need to edit Mailman's buildout.cfg file. Look for the 'develop'
- line under the [buildout] section. Change the path to the megamerge
- package to point to the location of your checked out branch above.
-
- You will need the gettext package (specifically, the msgfmt(1) command) in
- order to build the I18N message catalogs. If you're missing this command,
- it is known that the digests.txt test will fail.
-
- You do not need anything other than Python 2.6 and an internet connection
- to get all the other Mailman 3 dependencies. Here are the commands to
- build everything:
-
- % python2.6 bootstrap.py
- % bin/buildout
-
- Now you can run the test suite via:
-
- % bin/test
-
- You should see no failures.
-
- At this point you can read the doctests by looking in all the 'doc'
- directories under the 'mailman' package. Doctests are documentation
- first, so they should give you a pretty good idea how various components
- of Mailman 3 works.
-
- What, you actually want to /run/ Mailman 3? Oh well, if you insist. You
- will need to set up a configuration file to override the defaults and set
- things up for your environment. Currently Mailman 3 is configured with a
- bastard mix of the old configuration system and lazr.config, which is an
- ini-style configuration system. Eventually all configuration will be
- converted to lazr.config.
-
- For now though, start by looking through src/mailman/config/schema.cfg.
- Create a file for your overrides; it can be called anything and can live
- anywhere, but I like to call it 'mailman.cfg'. For any value in
- schema.cfg you want to override, just add a section header (the
- square-bracketed names) and then the 'key: value' pair you want to
- override.
-
- You will need to pass the -C flag to any bin command you want to invoke,
- pointing it at your mailman.cfg file. The next release will make this
- simpler by searching some default locations.
-
- You can use the create_list, remove_list, list_lists, add_members, and
- list_members to set up and populate some mailing lists. You of course
- also need to use mailmanctl to start the queue runners, and then you can
- use the inject command to put some messages into the queue. For the most
- part, they ought to get delivered <wink>.
-
- Please note that the web u/i does /not/ work yet.
-
-
-
-Local Variables:
-mode: indented-text
-indent-tabs-mode: nil
-End:
diff --git a/docs/NEWS.txt b/docs/NEWS.txt
deleted file mode 100644
index a3fc04d31..000000000
--- a/docs/NEWS.txt
+++ /dev/null
@@ -1,268 +0,0 @@
-================================================
-Mailman - The GNU Mailing List Management System
-================================================
-
-Copyright (C) 1998-2009 by the Free Software Foundation, Inc.
-51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
-
-Here is a history of user visible changes to Mailman.
-
-3.0 alpha 4 -- "Vital Signs"
-============================
-(20XX-XX-XX)
-
-
-3.0 alpha 3 -- "Working Man"
-============================
-(2009-08-21)
-
-Configuration
--------------
- * Configuration is now done through lazr.config. Defaults.py is
- dead. lazr.config files are essentially hierarchical ini files.
- * Domains are now stored in the database instead of in the configuration file.
- * pre- and post- initialization hooks are now available to plugins. Specify
- additional hooks to run in the configuration file.
- * Add the environment variable $MAILMAN_CONFIG_FILE which overrides the -C
- command line option.
- * Make LMTP more compliant with Postfix docs (Patrick Koetter)
- * Added a NullMTA for mail servers like Exim which just work automatically.
-
-Architecture
-------------
-
- * 'bin/mailman' is a new super-command for managing Mailman from the command
- line. Some older bin scripts have been converted, with more to come.
- * Mailman now has an administrative REST interface which can be used to get
- information from and manage Mailman remotely.
- * Back port of Mailman 2.1's limit on .bak file restoration. After 3
- restores, the file is moved to the bad queue, with a .psv extension. (Mark
- Sapiro)
- * Digest creation is moved into a new queue runner so it doesn't block main
- message processing.
-
-Other changes
--------------
- * bin/make_instance is no longer necessary, and removed
- * The debug log is turned up to info by default to reduce log file spam.
-
-Building and installation
--------------------------
- * All doc tests can now be turned into documentation, via Sphinx. Just run
- bin/docs after bin/buildout.
-
-
-3.0 alpha 2 -- "Grand Designs"
-==============================
-(03-Jan-2009)
-
-Licensing
----------
-
- * Mailman 3 is now licensed under the GPLv3.
-
-Bug fixes
----------
-
- * Changed bin/arch to attempt to open the mbox before wiping the old
- archive. Launchpad bug #280418.
-
- * Added digest.mbox and pending.pck to the 'list' files checked by
- check_perms. Launchpad bug #284802.
-
-Architecture
-------------
-
- * Converted to using zope.testing as the test infrastructure. Use bin/test
- now to run the full test suite.
- <http://pypi.python.org/pypi/zope.testing/3.7.1>
- * Partially converted to using lazr.config as the new configuration
- regime. Not everything has been converted yet, so some manual editing
- of mailman/Defaults.py is required. This will be rectified in future
- versions. <http://launchpad.net/lazr.config>
- * All web-related stuff is moved to its own directory, effectively moving
- it out of the way for now.
- * The email command infrastructure has been reworked to play more nicely
- with the plug-in architecture. Not all commands have yet been
- converted.
-
-Other changes
--------------
-
- * The LMTP server now properly calculates the message's original size.
- * For command line scripts, -C names the configuration file to use. For
- convenient testing, if -C is not given, then the environment variable
- MAILMAN_CONFIG_FILE is consulted.
- * Support added for a local MHonArc archiver, as well as archiving
- automatically in the remote Mail-Archive.com service.
- * The permalink proposal for supporting RFC 5064 has been adopted.
- * Mailing lists no longer have a .web_page_url attribute; this is taken from
- the mailing list's domain's base_url attribute.
- * Incoming MTA selection is now taken from the config file instead of
- plugins. An MTA for Postfix+LMTP is added. bin/genaliases works again.
- * If a message has no Message-ID, the stock archivers will return None for
- the permalink now instead of raising an assertion.
- * IArchiver no longer has an is_enabled property; this is taken from the
- configuration file now.
-
-Installation
-------------
-
- * Python 2.6 is the minimal requirement.
- * Converted to using zc.buildout as the build infrastructure. See
- docs/ALPHA.txt for details.
- <http://pypi.python.org/pypi/zc.buildout/1.1.1>
-
-
-3.0 alpha 1 -- "Leave That Thing Alone"
-=======================================
-(08-Apr-2008)
-
-User visible changes
---------------------
-
- * So called 'new style' subject prefixing is the default now, and the only
- option. When a list's subject prefix is added, it's always done so before
- any Re: tag, not after. E.g. '[My List] Re: The subject'.
- * RFC 2369 headers List-Subscribe and List-Unsubscribe now use the preferred
- -join and -leave addresses instead of the -request address with a subject
- value.
-
-Configuration
--------------
-
- * There is no more separate configure; make; make install step. Mailman 3.0
- is a setuptools package.
- * Mailman can now be configured via a 'mailman.cfg' file which lives in
- $VAR_PREFIX/etc. This is used to separate the configuration from the
- source directory. Alternative configuration files can be specified via
- -C/--config for most command line scripts. mailman.cfg contains Python
- code. mm_cfg.py is no more. You do not need to import Defaults.py in
- etc/mailman.cfg. You should still consult Defaults.py for the list of site
- configuration variables available to you.
-
- See the etc/mailman.cfg.sample file.
- * PUBLIC_ARCHIVE_URL and DEFAULT_SUBJECT_PREFIX now takes $-string
- substitutions instead of %-string substitutions. See documentation in
- Defaults.py.in for details.
- * Message headers and footers now only accept $-string substitutions;
- %-strings are no longer supported. The substitution variable
- '_internal_name' has been removed; use $list_name or $real_name
- instead. The substitution variable $fqdn_listname has been added.
- DEFAULT_MSG_FOOTER in Defaults.py.in has been updated accordingly.
- * The KNOWN_SPAMMERS global variable is replaced with HEADER_MATCHES. The
- mailing list's header_filter_rules variable is replaced with header_matches
- which has the same semantics as HEADER_MATCHES, but is list-specific.
- * DEFAULT_MAIL_COMMANDS_MAX_LINES -> EMAIL_COMMANDS_MAX_LINES
- * All SMTP_LOG_* templates use $-strings and all consistently write the
- Message-ID as the first item in the log entry.
- * DELIVERY_MODULE now names a handler, not a module (yes, this is a
- misnomer, but it will likely change again before the final release).
-
-Architecture
-------------
-
- * Internally, all strings are Unicodes.
- * Implementation of a chain-of-rules based approach for deciding whether a
- message should initially be accepted, held for approval, rejected/bounced,
- or discarded. This replaces most of the disposition handlers in the
- pipeline. The IncomingRunner now only processes message through the rule
- chains, and once accepted, places the message in a new queue processed by
- the PipelineRunner.
- * Substantially reworked the entire queue runner process management,
- including mailmanctl, a new master script, and the qrunners. This should
- be much more robust and reliable now.
- * The Storm ORM is used for data storage, with the SQLite backend as the
- default relational database.
- * Zope interfaces are used to describe the major components.
- * Users are now stored in a unified database, and shared across all mailing
- lists.
- * Mailman's web interface is now WSGI compliant. WSGI is a Python standard
- (PEP 333) allowing web applications to be (more) easily integrated with any
- number of existing Python web application frameworks. For more information
- see:
-
- http://www.wsgi.org/wsgi
- http://www.python.org/dev/peps/pep-0333/
-
- Mailman can still be run as a traditional CGI program of course.
- * Mailman now provides an LMTP server for more efficient integration with
- supporting mail servers (e.g. Postfix, Sendmail). The Local Mail Transport
- Protocol is defined in RFC 2033:
-
- http://www.faqs.org/rfcs/rfc2033.html
- * Virtual domains are now fully supported in that mailing lists of the same
- name can exist in more than one domain. This is accomplished by renaming
- the lists/ and archives/ subdirectories after the list's posting address.
- For example, data for list foo in example.com and list foo in example.org
- will be stored in lists/foo@example.com and lists/foo@example.org.
-
- For Postfix or manual MTA users, you will need to regenerate your mail
- aliases. Use bin/genaliases.
-
- VIRTUAL_HOST_OVERVIEW has been removed, effectively Mailman now operates
- as if it were always enabled. If your site has more than one domain,
- you must configure all domains by using add_domain() in your
- etc/mailman.cfg flie (see below -- add_virtual() has been removed).
- * If you had customizations based on Site.py, you will need to re-implement
- them. Site.py has been removed.
- * The site list is no more. You can remove your 'mailman' site list unless
- you want to retain it for other purposes, but it is no longer used (or
- required) by Mailman. You should set NO_REPLY_ADDRESS to an address that
- throws away replies, and you should set SITE_OWNER_ADDRESS to an email
- address that reaches the person ultimately responsible for the Mailman
- installation. The MAILMAN_SITE_LIST variable has been removed.
- * qrunners no longer restart on SIGINT; SIGUSR1 is used for that now.
-
-Internationalization Big Changes
---------------------------------
-
- * Translators should work only on messages/<lang>/LC_MESSAGES/mailman.po.
- Templates files are generated from mailman.po during the build process.
-
-New Features
-------------
-
- * Confirmed member change of address is logged in the 'subscribe' log, and if
- admin_notify_mchanges is true, a notice is sent to the list owner using a
- new adminaddrchgack.txt template.
- * There is a new list attribute 'subscribe_auto_approval' which is a list of
- email addresses and regular expressions matching email addresses whose
- subscriptions are exempt from admin approval. RFE 403066.
-
-Command line scripts
---------------------
-
- * Most scripts have grown a -C/--config flag to allow you to specify a
- different configuration file. Without this, the default etc/mailman.cfg
- file will be used.
- * the -V/--virtual-host-overview switch in list_lists has been removed, while
- -d/--domain and -f/--full have been added.
- * bin/newlist is renamed bin/create_list and bin/rmlist is renamed
- bin/remove_list. Both take fully-qualified list names now (i.e. the list's
- posting address), but also accept short names, in which case the default
- domain is used. newlist's -u/--urlhost and -e/--emailhost switches have
- been removed. The domain that the list is being added to must already
- exist.
- * Backport the ability to specify additional footer interpolation variables
- by the message metadata 'decoration-data' key.
-
-Bug fixes and other patches
----------------------------
-
- * Removal of DomainKey/DKIM signatures is now controlled by Defaults.py
- mm_cfg.py variable REMOVE_DKIM_HEADERS (default = No).
- * Queue runner processing is improved to log and preserve for analysis in the
- shunt queue certain bad queue entries that were previously logged but lost.
- Also, entries are preserved when an attempt to shunt throws an exception
- (1656289).
- * The processing of Topics regular expressions has changed. Previously the
- Topics regexp was compiled in verbose mode but not documented as such which
- caused some confusion. Also, the documentation indicated that topic
- keywords could be entered one per line, but these entries were not handled
- properly. Topics regexps are now compiled in non-verbose mode and multi-
- line entries are 'ored'. Existing Topics regexps will be converted when
- the list is updated so they will continue to work.
- * The List-Help, List-Subscribe, and List-Unsubscribe headers were
- incorrectly suppressed in messages that Mailman sends directly to users.
- * The 'adminapproved' metadata key is renamed 'moderator_approved'.
diff --git a/docs/OLD-NEWS.txt b/docs/OLD-NEWS.txt
deleted file mode 100644
index c87635640..000000000
--- a/docs/OLD-NEWS.txt
+++ /dev/null
@@ -1,2835 +0,0 @@
-Mailman - The GNU Mailing List Management System
-Copyright (C) 1998-2007 by the Free Software Foundation, Inc.
-51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
-
-Here is a history of user visible changes to Mailman.
-
-2.1.10b4 (13-Mar-2008)
-
- Security
-
- - The 2.1.9 fixes for CVE-2006-3636 were not complete. In particular,
- some potential cross-site scripting attacks were not detected in
- editing templates and updating the list's info attribute via the web
- admin interface. This has been assigned CVE-2008-0564 and has been
- fixed. Thanks again to Moritz Naumann for assistance with this.
-
- New Features
-
- - Changed cmd_who.py to list all members if authorization is with the
- list's admin or moderator password and to accept the password if the
- roster is public. Also changed the web roster to show hidden members
- when authorization is by site or list's admin or moderator password
- (1587651).
-
- - Added the ability to put a list name in accept_these_nonmembers
- to accept posts from members of that list (1220144).
-
- - Added a new 'sibling list' feature to exclude members of another list
- from receiving a post from this list if the other list is in the To: or
- Cc: of the post or to include members of the other list if that list is
- not in the To: or Cc: of the post (Patch ID 1347962).
-
- - Added the admin_member_chunksize attribute to the admin General Options
- interface (Bug 1072002, Partial RFE 782436).
-
-Internationalization
-
- - Added the Hebrew translation from Dov Zamir. This includes addition of
- a direction ('ltr', 'rtl') to the LC_DESCRIPTIONS table. The
- add_language() function defaults direction to 'ltr' to not break
- existing mm_cfg.py files.
-
- - Added the Slovak translation from Martin Matuska.
-
- - Added the Galician translation from Frco. Javier Rial Rodríguez.
-
- Bug fixes and other patches
-
- - Added bounce recognition for several additional bounce formats.
-
- - Fixed CommandRunner.py to decode a quoted-printable or base64 encoded
- message part (1829061).
-
- - Fixed Scrubber.py to avoid loss of an implicit text/plain message part
- with no Content-* headers in a MIME multipart message (759841). Fixed
- several other minor scrubber issues (1242450).
-
- - Added Date and Message-ID headers to the confirm reply message that
- Mailman adds to the admin notification (1471318).
-
- - Fixed Cgi/options.py to not present the "empty" topic to user.
-
- - Fixed Handlers/CalcRecips.py to not process topics if topics are
- disabled for the list. This caused users who had previously subscribed
- to topics and elected to not receive non-matching posts to receive no
- messages after topics were disabled for the list.
-
- - Fixed MaildirRunner.py to handle hyphenated list names.
-
- - Fixed a bug in MimeDel.py (content filtering) which caused
- *_filename_extensions to not match if the extension in the message was
- not all lower case.
-
- - Fixed versions.py to not call a non-existant method when converting held
- posts from Mailman 1.0.x lists.
-
- - Added a test to configure to detect a missing python-devel package on
- some RedHat systems.
-
- - Fixed bin/dumpdb to once again be able to dump marshals (broken since
- 2.1.5) (963137).
-
- - Worked around a bug in the Python email library that could cause Mailman
- to not get the correct value for the sender of a message from an RFC
- 2231 encoded header causing spurious held messages.
-
- - Fixed bin/check_perms to detect certain missing permissions on the
- archives/private/ and archives/private/<list>/database/ directories.
-
- - Improved exception handling in cron/senddigests.
-
- - Changed the admindb page to not show the "Discard all messages marked
- Defer" checkbox when there are only (un)subscribes and no held messages.
- Also added a separator and heading for "Held Messages" like the ones for
- "Subscribe Requests" and "Unsubscribe Requests". Suppressed the
- "Database Updated" message when coming from the login page. Also
- removed the "Discard all messages marked Defer" checkbox from the
- details page where it didn't work (1562922, 1000699).
-
- - Fixed admin.py so null VARHELP category is handled (1573393).
-
- - Fixed OldStyleMemberships.py to preserve delivery statuses BYADMIN
- and BYUSER on a straight change of address (1642388). Also fixed a
- bug that could result in a member key with uppercase in the domain.
-
- - Fixed bin/withlist so that -r can take a full package path to a
- callable.
-
- - Removal of DomainKey/DKIM signatures is now controlled by Defaults.py
- mm_cfg.py variable REMOVE_DKIM_HEADERS (default = No). Also, if
- REMOVE_DKIM_HEADERS = Yes, an Authentication-Results: header will be
- removed if present.
-
- - The DeprecationWarning issued by Python 2.5 regarding string exceptions
- is supressed.
-
- - format=flowed and delsp=yes are now preserved for message bodies when
- message headers/footers are added and attachments are scrubbed
- (1495122).
-
- - Queue runner processing is improved to log and preserve for analysis in
- the shunt queue certain bad queue entries that were previously logged
- but lost. Also, entries are preserved when an attempt to shunt throws
- an exception (1656289).
-
- - The admin Membership List pages have been changed in that the email
- address which forms a part of the various CGI data keys is now
- urllib.quote()ed. This allows changing options for and unsubbing an
- address which contains a double-quote character, but it may require
- changes to scripts that screen-scrape the web admin interface to
- produce a membership list so they will report an unquoted address.
-
- - The fix for bug 1181161 in 2.1.7 was incomplete. The Approve(d): line
- wasn't always found in quoted-printable encoded parts and was never
- found in base64 encoded parts. This is now fixed.
-
- - Fixed a mail loop if a list owner puts the list's -bounces or -admin
- address in the list's owner attribute (1834569).
-
- - Fixed the mailto: link in archived messages to prefix the subject with
- Re: and to put the correct message-id in In-Reply-To (1621278, 1834281).
-
- - Coerced list name arguments to lower case in the change_pw, inject,
- list_admins and list_owners command line tools (patch 1842412).
-
- - Fixed cron/disabled to test if bounce info is stale before disabling
- a member when the threshold has been reduced.
-
- - It wasn't noted here, but in 2.1.9, queue runner processing was made
- more robust by making backups of queue entries when they were dequeued
- so they could be recovered in the event of a system failure. This
- opened the possibility that if a message itself caused a runner to
- crash, a loop could result that would endlessly reprocess the message.
- This has now been fixed by adding a dequeue count to the entry and
- moving the entry aside and logging the fact after the third dequeue of
- the same entry.
-
- - Fixed the command line scripts add_members, sync_members and
- clone_member to properly handle banned addresses (1904737).
-
- - Fixed bin/newlist to add the list's preferred language to the list's
- available_languages if it is other than the server's default language
- (1906368).
-
- - Changed the first URL in the RFC 2369 List-Unsubscribe: header to go
- to the options login page instead of the listinfo page.
-
- - Changed the options login page to not issue the "No address given" error
- when coming from the List-Unsubscribe and other direct links. Also
- changed to remember the user's language selection when redisplaying the
- page following an error.
-
- - Changed cmd_subscribe.py to properly accept (no)digest without a
- password and to recognize (no)digest and address= case insensitively.
-
- Miscellaneous
-
- - Brad Knowles' mailman daily status report script updated to 0.0.17.
-
-2.1.9 (12-Sep-2006)
-
- Security
-
- - A malicious user could visit a specially crafted URI and inject an
- apparent log message into Mailman's error log which might induce an
- unsuspecting administrator to visit a phishing site. This has been
- blocked. Thanks to Moritz Naumann for its discovery.
-
- - Fixed denial of service attack which can be caused by some
- standards-breaking RFC 2231 formatted headers. CVE-2006-2941.
-
- - Several cross-site scripting issues have been fixed. Thanks to Moritz
- Naumann for their discovery. CVE-2006-3636
-
- - Fixed an unexploitable format string vulnerability. Discovery and fix
- by Karl Chen. Analysis of non-exploitability by Martin 'Joey' Schulze.
- Also thanks go to Lionel Elie Mamane. CVE-2006-2191.
-
- Internationalization
-
- - New languages: Arabic, Vietnamese.
-
- Bug fixes and other patches
-
- - Fixed Decorate.py so that characters in message header/footer which
- are not in the character set of the list's language are ignored rather
- than causing shunted messages (1507248).
-
- - Switchboard.py - Closed very tiny holes at the upper ends of queue
- slices that could result in unprocessable queue entries. Improved FIFO
- processing when two queue entries have the same timestamp.
-
-2.1.8 (15-Apr-2006)
-
- Security
-
- - A cross-site scripting hole in the private archive script of 2.1.7
- has been closed. Thanks to Moritz Naumann for its discovery.
-
- Bug fixes and other patches
-
- - Bouncers support added: 'unknown user', Microsoft SMTPSVC, Prodigy.net
- and several others.
-
- - Updated email library to 2.5.7 which will encode payload into qp/base64
- upon setting. This enabled backing out the scrubber related patches
- including 'X-Mailman-Scrubbed' header in 2.1.7.
-
- - Fix SpamDetect.py potential hold/reject loop problem.
-
- - A warning message from email package to the stderr can cause error
- in Logging because stderr may be detached from the process during
- the qrunner run. We chose not to output errors to stderr but to
- the logs/error if the process is running under mailmanctl subprocess.
-
- - DKIM header cleansing was separated from Cleanse.py and added to
- -owner messages too.
-
- - Fixes: Lose Topics when go directly to topics URL (1194419).
- UnicodeError running bin/arch (1395683). edithtml.py missing import
- (1400128). Bad escape in cleanarch. Wrong timezone in list archive
- index pages (1433673). bin/arch fails with TypeError (1430236).
- Subscription fails with some Language combinations (1435722).
- Postfix delayed notification not recognized (863989). 2.1.7 (VERP)
- mistakes delay notice for bounce (1421285). show_qfiles: 'str'
- object has no attribute 'as_string' (1444447). Utils.get_domain()
- wrong if VIRTUAL_HOST_OVERVIEW off (1275856).
-
- Miscellaneous
-
- - Brad Knowles' mailman daily status report script updated to 0.0.16.
-
-2.1.7 (31-Dec-2005)
-
- Security
-
- - The fix for CAN-2005-0202 has been enhanced to issue an appropriate
- message instead of just quietly dropping ./ and ../ from URLs.
-
- - A note on CVE-2005-3573: Although the RFC2231 bug example in the CVE has
- been solved in Mailman 2.1.6, there may be more cases where
- ToDigest.send_digests() can block regular delivery. We put the
- send_digests() calling part in a try/except clause and leave a message
- in the error log if something happened in send_digests(). Daily call of
- cron/senddigests will provide more detail to the site administrator.
-
- - List administrators can no longer change the user's option/subscription
- globally. Site admin can change these only if
- mm_cfg.ALLOW_SITE_ADMIN_COOKIES is set to Yes.
-
- - <script> tags are HTML-escaped in the edithtml CGI script.
-
- - Since the probe message for disabled users may reach unintended
- recipients, the password is excluded from sendProbe() and probe.txt.
- Note that the default value of VERP_PROBE has been set to `No' from
- 2.1.6., thus this change doesn't affect the default behavior.
-
- New Features
-
- - Always remove DomainKey (and similar) headers from messages sent to the
- list. (1287546)
-
- - List owners can control the content filter behavior when collapsing
- multipart/alternative parts to its first subpart. This allows the
- option of letting the HTML part pass through after other content
- filtering is done.
-
- Internationalization
-
- - New language: Interlingua.
-
- Bug fixes and other patches
-
- - Defaults.py.in: SCRUBBER_DONT_USE_ATTACHMENT_FILENAME is set to True for
- safer operation.
-
- - Fixed the bug where Scrubber.py munges quoted-printable by introducing
- the 'X-Mailman-Scrubbed' header which marks that the payload is
- scrubber-munged. The flag is referenced in ToDigest.py, ToArchive.py,
- Decorate.py and Archiver. A similar problem in ToDigest.py where the
- plain digest is generated is also fixed.
-
- - Fixed Syslog.py to write quopri encoded messages when it fail to write
- 8-bit characters.
-
- - Fixed MTA/Postfix.py to check aliases group permission in check_perms
- and fixed mailman-install document on this matter (1378270).
-
- - Fixed private.py to go to the original URL after authorization
- (1080943).
-
- - Fixed bounce log score messages to be more consistent.
-
- - Fixed bin/remove_members to accept no arguments when both --fromall and
- --file= options are specified.
-
- - Changed cgi-bin and mail wrapper "group not found" error message to be
- more descriptive of the actual problem.
-
- - The list's ban_list now applies to address changes, admin mass
- subscribes and invites, and to confirmations/approvals of address
- changes, subscriptions and invitations.
-
- - quoted-printable and base64 encoded parts are decoded before passing to
- HTML_TO_PLAIN_TEXT_COMMAND (1367783).
-
- - Approve: header is removed from posts, and treated the same as the
- Approved: header. (1355707)
-
- - Fixed the removal of the line following Approve[d]: line in body of
- post. (1318883)
-
- - The Approve[d]: <password> header is removed from all text/* parts in
- addition the initial text/plain part. It must still be the first
- non-blank line in the first text/plain part or it won't be found or
- removed at all. (1181161)
-
- - Posts are now logged in post log file with the true sender, not
- listname-bounces. (1287921)
-
- - Correctly initialize and remember the list's default_member_moderation
- attribute in the web list creation page. (1263213)
-
- - PEP263 charset is added to the config_list output. (1343100)
-
- - Fixed header_filter_rules getting lost if accessed directly and
- authentication was needed by login page. (1230865)
-
- - Obscure email when the poster doesn't set full name in 'From:' header.
-
- - Preambles and epilogues are taken into account when calculating message
- sizes for holding purposes. (Mark Sapiro)
-
- - Logging/Logger.py unicode transform option. (1235567)
-
- - bin/update crashes with bogus files. (949117)
-
- - Bugs and patches: 1212066/1301983 (Date header in create/remove notice)
-
-2.1.6 (30-May-2005)
-
- Security
-
- - Critical security patch for path traversal vulnerability in private
- archive script (CAN-2005-0202).
-
- - Added the ability for Mailman generated passwords (both member and list
- admin) to be more cryptographically secure. See new configuration
- variables USER_FRIENDLY_PASSWORDS, MEMBER_PASSWORD_LENGTH, and
- ADMIN_PASSWORD_LENGTH. Also added a new bin/withlist script called
- reset_pw.py which can be used to reset all member passwords. Passwords
- generated by Mailman are now 8 characters by default for members, and 10
- characters for list administrators.
-
- - A potential cross-site scripting hole in the driver script has been
- closed. Thanks to Florian Weimer for its discovery. Also, turn
- STEALTH_MODE on by default.
-
- Internationalization
-
- - Chinese languages are now supported. They have been moved from 'big5'
- and 'gb' to 'zh_TW' and 'zh_CN' respectively for compliance to the IANA
- spec. Note, however, that the character sets were changed from 'Big5'
- or 'GB2312' to 'UTF-8' to cope with the insufficient codecs support in
- Python 2.3 and earlier. You may have to install Chinese capable codecs
- (like CJKCodecs) separately to handle the incoming messages which are in
- local charsets, or upgrade your Python to 2.4 or newer.
-
- Behavior or defaults changes
-
- - VERP_PROBES is disabled by default.
-
- - bin/withlist can be run without a list name, but only if -i is given.
- Also, withlist puts the directory it's found in at the end of sys.path,
- making it easier to run withlist scripts that live in $prefix/bin.
-
- - bin/newlist grew two new options: -u/--urlhost and -e/--emailhost which
- lets the user provide the web and email hostnames for the new mailing
- list. This is a better way to specify the domain for the list, rather
- than the old 'mylist@hostname' syntax (which is still supported for
- backward compatibility, but deprecated).
-
- Compatibility
-
- - Python 2.4 compatibility issue: time.strftime() became strict about the
- 'day of year' range. (1078482)
-
- New Features
-
- - New feature: automatic discards of held messages. List owners can now
- set how many days to hold the messages in the moderator request queue.
- cron/checkdb will automatically discard old messages. See the
- max_days_to_hold variable in the General Options and
- DEFAULT_MAX_DAYS_TO_HOLD in Defaults.py. This defaults to 0
- (i.e. disabled). (790494)
-
- - New feature: subject_prefix can be configured to include a sequence
- number which is taken from the post_id variable. Also, the prefix is
- always put at the start of the subject, i.e. "[list-name] Re: original
- subject", if mm_cfg.OLD_STYLE_PREFIXING is set No. The default style
- is "Re: [list-name]" if numbering is not set, for backward compatibility.
- If the list owner is using numbering feature by "%d" directive, the new
- style, "[list-name 123] Re:", is always used.
-
- - List owners can now cusomize the non-member rejection notice from
- admin/<listname>/privacy/sender page. (1107169)
-
- - Allow editing of the welcome message from the admin page (1085501).
-
- - List owners can now use Scrubber to get the attachments scrubbed (held
- in the web archive), if the site admin permits it in mm_cfg.py. New
- variables introduced are SCRUBBER_DONT_USE_ATTACHMENT_FILENAME and
- SCRUBBER_USE_ATTACHMENT_FILENAME_EXTENSION in Defaults.py for scrubber
- behavior. (904850)
-
- Documentation
-
- - Most of the installation instructions have been moved to a latex
- document. See doc/mailman-install/index.html for details.
-
- Bug fixes and other patches
-
- - Mail-to-news gateway now strips subject prefix off from a response
- by a mail user if news_prefix_subject_too is not set.
-
- - Date and Message-Id headers are added for digests. (1116952)
-
- - Improved mail address sanity check. (1030228)
-
- - SpamDetect.py now checks attachment header. (1026977)
-
- - Filter attachments by filename extensions. (1027882)
-
- - Bugs and patches: 955381 (older Python compatibility), 1020102/1013079/
- 1020013 (fix spam filter removed), 665569 (newer Postfix bounce
- detection), 970383 (moderator -1 admin requests pending), 873035
- (subject handling in -request mail), 799166/946554 (makefile
- compatibility), 872068 (add header/footer via unicode), 1032434
- (KNOWN_SPAMMERS check for multi-header), 1025372 (empty Cc:), 789015
- (fix pipermail URL), 948152 (Out of date link on Docs), 1099138
- (Scrubber.py breaks on None part), 1099840/1099840 (deprecated %
- insertion), 880073/933762 (List-ID RFC compliance), 1090439 (passwd
- reminder shunted), 1112349 (case insensitivity in acceptable_aliases),
- 1117618 (Don't Cc for personalized anonymous list), 1190404 (wrong
- permission after editing html)
-
-2.1.5 (15-May-2004)
-
- - The admindb page has a checkbox that allows you to discard all held
- messages that are marked Defer. On heavy lists with lots of spam holds,
- this makes clearing them much faster.
-
- - The qrunner system has changed to use only one file per message.
- However the configuration variable METADATA_FORMAT has been removed, and
- support for SAVE_MSGS_AS_PICKLES has been changed. The latter no longer
- writes messages as plain text. Instead, they are stored as pickles of
- plain strings, using the text pickle format. This still makes them
- non-binary files readable and editable by humans.
-
- bin/dumpdb also works differently. It will print out the entire pickle
- file (with more verbosity) and if used with 'python -i', it binds msg to
- a list of all objects found in the pickle file.
-
- Removed from Defaults.py: PENDINGDB_LOCK_TIMEOUT,
- PENDINGDB_LOCK_ATTEMPTS, METAFMT_MARSHAL, METAFMT_BSDDB_NATIVE,
- METAFMT_ASCII, METADATA_FORMAT
-
- - The bounce processor has been redesigned so that now when an address's
- bounce score reaches the threshold, that address will be sent a probe
- message. Only if the probe bounces will the address be disabled. The
- score is reset to zero when the probe is sent. Also, bounce events are
- now kept in an event file instead of in memory. This should help
- contain the bloat of the BounceRunner.
-
- New supporting variables in Defaults.py: VERP_PROBE_FORMAT,
- VERP_PROBE_REGEXP
-
- REGISTER_BOUNCES_EVERY is promoted to a Defaults.py variable.
-
- - The pending database has been changed from a global pickle file, to a
- unique pickle file per mailing list.
-
- - The 'request' database file has changed from a marshal, to the more
- secure pickle format.
-
- - Disallow multiple password retrievals.
-
- - SF patch #810675 which adds a "Discard all messages marked Defer" button
- for faster admindb maintenance.
-
- - The email package is updated to version 2.5.5.
-
- - New language: Turkish.
-
- - Bugs and patches: 869644, 869647 (NotAMemberError for old cookie data),
- 878087 (bug in Slovenian catalog), 899263 (ignore duplicate pending
- ids), 810675 (discard all defers button)
-
-2.1.4 (31-Dec-2003)
-
- - Close some cross-site scripting vulnerabilities in the admin pages
- (CAN-2003-0965).
-
- - New languages: Catalan, Croatian, Romanian, Slovenian.
-
- - New mm_cfg.py/Defaults.py variable PUBLIC_MBOX which allows the site
- administrator to disable public access to all the raw list mbox files
- (this is not a per-list configuration).
-
- - Expanded header filter rules under Privacy -> Spam Filters. Now you can
- specify regular expression matches against any header, with specific
- actions tied to those matches.
-
- - Rework the SMTP error handling in SMTPDirect.py to avoid scoring bounces
- for all recipients when a permanent error code is returned by the mail
- server (e.g. because of content restrictions).
-
- - Promoted SYNC_AFTER_WRITE to a Default.py/mm_cfg.py variable and
- make it control syncing on the config.pck file. Also, we always flush
- and sync message files.
-
- - Reduce archive bloat by not storing the HTML body of Article objects in
- the Pipermail database. A new script bin/rb-archfix was added to clean
- up older archives.
-
- - Proper RFC quoting for List-ID descriptions.
-
- - PKGDIR can be passed to the make command in order to specify a different
- directory to unpack the distutils packages in misc. (SF bug 784700).
-
- - Improved logging of the origin of subscription requests.
-
- - Bugs and patches: 832748 (unsubscribe_policy ignored for unsub button on
- member login page), 846681 (bounce disabled cookie was always out of
- date), 835870 (check VIRTUAL_HOST_OVERVIEW on through the web list
- creation), 835036 (global address change when the new address is already
- a member of one of the lists), 833384 (incorrect admin password on a
- hold message confirmation attachment would discard the message), 835012
- (fix permission on empty archive index), 816410 (confirmation page
- consistency), 834486 (catch empty charsets in the scrubber), 777444 (set
- the process's supplemental groups if possible), 860135 (ignore
- DiscardMessage exceptions during digest scrubbing), 828811 (reduce
- process size for list and admin overviews), 864674/864676 (problems
- accessing private archives and rosters with admin password), 865661
- (Tokio Kikuchi's i18n patches), 862906 (unicode prefix leak in admindb),
- 841445 (setting new_member_options via config_list), n/a (fixed email
- command 'set delivery')
-
-2.1.3 (28-Sep-2003)
-
- Performance, Reliability, Security
-
- - Closed a cross-site scripting exploit in the create cgi script.
-
- - Improvements in the performance of the bounce processor.
- Now, instead of processing each bounce immediately (which
- can cause severe lock contention), bounce events are queued.
- Every 15 minutes by default, the queued bounce events are
- processed en masse, on a list-per-list basis, so that each
- list only needs to be locked once.
-
- - When some or all of a message's recipients have temporary
- delivery failures, the message is moved to a "retry" queue.
- This queue wakes up occasionally and moves the file back to
- the outgoing queue for attempted redelivery. This should
- fix most observed OutgoingRunner 100% cpu consumption,
- especially for bounces to local recipients when using the
- Postfix MTA.
-
- - Optional support for fsync()'ing qfile data after writing.
- Under some catastrophic system failures (e.g. power lose),
- it would be possible to lose messages because the data
- wasn't sync'd to disk. By setting SYNC_AFTER_WRITE to True
- in Mailman/Queue/Switchboard.py, you can force Mailman to
- fsync() queue files after flushing them. The benefits are
- debatable for most operating environments, and you must
- ensure that your Python has the os.fsync() function defined
- before enabling this feature (it isn't, even on all
- Unix-like operating systems).
-
- Internationalization
-
- - New languages Ukrainian, Serbian, Danish, Euskara/Basque.
-
- - Fixes to template lookup. Lists with local overriding
- templates would find the wrong template.
-
- - .mo files (for internationalization) are now generated at
- build time instead of coming as part of the source
- distribution.
-
- Documentation
-
- - A first draft of member documentation by Terri Oda. There
- is also a Japanese translation of this manual by Ikeda Soji.
-
- Archiver / Pipermail
-
- - In the configuration variables PUBLIC_EXTERNAL_ARCHIVER, and
- PRIVATE_EXTERNAL_ARCHIVER, %(hostname)s has been added to
- the list of allowable substitution variables.
-
- - The timezone is now taken into account when figuring the
- posting date for an article.
-
- Scripts / Cron
-
- - Fixes to cron/disabled for NotAMemberError crashes.
-
- - New script bin/show_qfiles which prints the contents of .pck
- message files. New script bin/discard which can be used to
- mass discard held messages.
-
- - Fixes to cron/mailpasswds to account for old password-less
- subscriptions.
-
- - bin/list_members has grown two new options: --invalid/-i
- prints only the addresses in the member database that are
- invalid (which could have snuck in via old releases);
- --unicode/-u prints addresses which are stored as Unicode
- objects instead of as normal strings.
-
- Miscellaneous
-
- - Fixes to problems in some configurations where Python wouldn't
- be able to find its standard library.
-
- - Fixes to the digest which could cause MIME-losing missing
- newlines when parts are scrubbed via the content filters.
-
- - In the News/Mail gateway admin page, the configuration variable
- nntp_host can now be a name:port pair.
-
- - When messages are pulled from NNTP, the member moderation checks
- are short-circuited.
-
- - email 2.5.4 is included. This fixes an RFC 2231 bug, among
- possibly others.
-
- - Fixed some extra spaces that could appear in the List-ID header.
-
- - Fixes to ensure that invalid email addresses can't be invited.
-
- - WEB_LINK_COLOR in Defaults.py/mm_cfg.py should now work.
-
- - Fixes so that shunted message file names actually match
- those logged in log/errors.
-
- - An improved pending action cookie generation algorithm has
- been added.
-
- - Fixes to the DSN bounce detector.
-
- - The usual additional u/i, internationalization, unicode, and
- other miscellaneous fixes.
-
-2.1.2 (22-Apr-2003)
-
- - New languages Portuguese (Portugal) and Polish.
-
- - Many convenient constants have been added to the Defaults.py
- module to (hopefully) make it more readable.
-
- - Email addresses which contain 8-bit characters in them are now
- rejected and won't be subscribed. This is not the same as 8-bit
- characters in the realname, which is still allowed.
-
- - The X-Originating-Email header is removed for anonymous lists.
- Hotmail apparently adds this header.
-
- - When running make to build Mailman, you can specify $DESTDIR to
- the install target to specify an alternative location for
- installation, without influencing the paths stored in
- e.g. Defaults.py. This is useful to package managers.
-
- - New Defaults.py variable DELIVERY_RETRY_WAIT which controls how
- long the outgoing qrunner will wait before it retries a
- tempfailure delivery.
-
- - The semantics for the extend.py hook to MailList objects has
- changed slightly. The hook is now called before attempting to
- lock and load the database.
-
- - Mailman now uses the email package version 2.5.1
-
- - bin/transcheck now checks for double-%'s
-
- - bin/genaliases grew a -q / --quiet flag
-
- - cron/checkdbs grew a -h / --help option.
-
- - The -c / --change-msg option has been removed from bin/add_members
-
- - bin/msgfmt.py has been added, taken from Python 2.3's Tools/i18n
- directory. The various .mo files are now no longer distributed
- with Mailman. They are generated at build time instead.
-
- - A new file misc/sitelist.cfg which can be used with
- bin/config_list provides a small number of recommended settings
- for your site list. Be sure to read it over before applying!
- sitelist.cfg is installed into the data directory.
-
- - Many bug fixes, including these SourceForge bugs closed and
- patches applied: 677668, 690448, 700538, 700537, 673294, 683906,
- 671294, 522080, 521124, 534297, 699900, 697321, 695526, 703941,
- 658261, 710678, 707608, 671303, 717096, 694912, 707624, 716755,
- 661138, 716754, 716702, 667167, 725369, 726415
-
-
-2.1.1 (08-Feb-2003)
-
- Lots of bug fixes and language updates. Also:
-
- - Closed a cross-site scripting vulnerability in the user options page.
-
- - Restore the ability to control which headers show up in messages
- included in plaintext and MIME digests. See the variables
- PLAIN_DIGEST_KEEP_HEADERS and MIME_DIGEST_KEEP_HEADERS in
- Defaults.py.
-
- - Messages included in the plaintext digests are now sent through
- the scrubber to remove (and archive) attachments. Otherwise,
- attachments would screw up plaintext digests. MIME digests
- include the attachments inline.
-
-2.1 final (30-Dec-2002)
-
- Last minute bug fixes and language updates.
-
-2.1 rc 1 (24-Dec-2002)
-
- Bug fixes and language updates. Also,
-
- - Lithuanian support has been added.
-
- - bin/remove_members grew --nouserack and --noadminack switches
-
- - configure now honors --srcdir
-
-2.1 beta 6 (09-Dec-2002)
-
- Lots and lots of bug fixes, and translation updates. Also,
-
- - ARCHIVER_OBSCURES_EMAILADDRS is now set to true by default.
-
- - QRUNNER_SAVE_BAD_MESSAGES is now set to true by default.
-
- - Bounce messages which were recognized, but in which no member
- addresses were found are no longer forwarded to the list
- administrator.
-
- - bin/arch grew a --wipe option which first removes the entire old
- archive before regenerating the new one.
-
- - bin/mailmanctl -u now prints a warning that permission problems
- could appear, such as when trying to delete a list through the
- web that has some archives in it.
-
- - bin/remove_members grew --nouserack/-n and -noadminack/-N options.
-
- - A new script bin/list_owners has been added for printing out
- list owners and moderators.
-
- - Dates in the web version of archived messages are now relative
- to the local timezone, and include the timezone names, when
- available.
-
-2.1 beta 5 (19-Nov-2002)
-
- As is typical for a late beta release, this one includes the usual
- bug fixes, tweaks, and massive new features (just kidding).
-
- IMPORTANT: If you are using Pipermail, and you have any archives
- that were created or added to in 2.1b4, you will need to run
- bin/b4b5-archfix, followed by bin/check_perms to fix some serious
- performance problems. From you install directory, run
- "bin/b4b5-archfix --help" for details.
-
- - The personalization options have been tweaked to provide more
- control over mail header and decoration personalizations. In
- 2.1b4, when personalization was enabled, the To and Cc headers
- were always overwritten. But that's usually not appropriate for
- anything but announce lists, so now these headers aren't changed
- unless "Full personalization" is enabled.
-
- - You now need to go to the General category to enable emergency
- moderation.
-
- - The order of the hold modules in the GLOBAL_PIPELINE has
- changed, again. Now Moderate comes before Hold.
-
- - Estonian language support has been added.
-
- - All posted messages should now get decorated with headers and
- footers in a MIME-safe way. Previously, some MIME type messages
- didn't get decorated at all.
-
- - bin/arch grew a -q/--quiet option
-
- - bin/list_lists grew a -b/--bare option
-
-2.1 beta 4 (26-Oct-2002)
-
- The usual assortment of bug fixes and language updates, some u/i
- tweaks, as well as the following:
-
- - Configuring / building / installing
- o Tightened up some configure checks; it will now bark loudly
- if you don't have the Python distutils package available
- (some Linux distros only include distutils in their "devel"
- packages).
-
- o Mailman's username/group security assertions are now done by
- symbolic name instead of numeric id. This provides a level
- of indirection that makes it much easier to move or package
- Mailman. --with-mail-gid and --with-cgi-gid are retained,
- but they control the group names used instead.
-
- - Command line scripts
- o A new script, bin/transcheck that language teams can use to
- check their .po files.
-
- o bin/list_members grew a --fullnames/-f option to print the
- full names along with the addresses.
-
- o cron/senddigests grew --help/-h and --listname/-l options.
-
- o bin/fix_url.py grew some command line options to support moving
- a list to a specific virtual domain.
-
- - Pipermail / archiving
- o Reworked the directory layout for archive attachments to be
- less susceptible to inode overload. Attachments are now
- placed in
-
- archives/private/<listname>/attachments/<YYYYMMDD>/<msgidhash>
-
- o Internationalization support in the archiver has been improved.
-
- - Internationalization
- o New languages: Swedish.
-
- - Mail handling
- o Content filtering now has a pass_mime_type variable, which
- is a whitelist of MIME types to allow in postings. See the
- details of the variable in the Content Filtering category
- for more information.
-
- o If a member has enabled their DontReceiveDuplicates option,
- we'll also strip their addresses from the Cc headers in the
- copy of the message sent to the list. This helps keep the
- Cc lines from growing astronomically.
-
- o Bounce messages are now forwarded to the list administrators
- both if they are unrecognized, and if no list member's
- address could be extracted.
-
- o Content filtering now has a filter_action variable which
- controls what happens when a message matches the content
- filter rules. The default is still to discard the message.
-
- o When searching for an Approve/Approved header, the first
- non-whitespace line of the body of the message is also
- checked, if the body has a MIME type of text/plain.
-
- o If a list is personalized, and the list's posting address is
- not included in a Reply-To header, the posting address is
- copied into a Cc header, otherwise there was no (easy) way a
- recipient could reply back to the list.
-
- o Added a MS Exchange bounce recognizer.
-
- o New configuration variable news_moderation which allows the
- mail->news gateway to properly post to moderated newsgroups.
-
- o Messages sent to a list's owners now comes from the site
- list to prevent mail loops when list owners or moderators
- having bouncing addresses.
-
- - Miscellaneous
- o mailanctl prevents runaway restarts by imposing a maximum
- restart value (defaulting to 10) for restarting the
- qrunners. If you hit this limit, do "mailmanctl stop"
- followed by "mailmanctl start".
-
- o The Membership Management page's search feature now includes
- searching on members real names.
-
- o The start of a manual for list administrators is given in
- Python HOWTO format (LaTeX). It's in doc/mailman-admin.tex
- but it still needs lots of fleshing out.
-
- o More protections against creating a list with an invalid name.
-
-2.1 beta 3 (09-Aug-2002)
-
- The usual assortment of bug fixes and language updates.
-
- - New languages: Dutch, Portuguese (Brazil)
-
- - New configure script options: --with-mailhost, --with-urlhost,
- --without-permcheck. See ./configure --help for details.
-
- - The encoding of Subject: prefixes is controlled by a new list
- option encode_ascii_prefixes. This is useful for languages with
- character sets other than us-ascii. See the Languages admin
- page for details.
-
- - A new list option news_prefix_subject_too controls whether
- postings gated from mail to news should have the subject prefix
- added to their Subject: header.
-
- - The algorithm for upgrading the moderation controls for a
- Mailman 2.0.x list has changed. The change should be
- transparent, but you'll want to double check the moderation
- controls after upgrading from MM2.0.x. This should have no
- effect for upgrades from a previous MM2.1 beta.
-
- See the UPGRADING file for details.
-
- - On the Mass Subscribe admin page, a text box has been added so
- that the admin can add a custom message to be prepended to the
- welcome/invite notification.
-
- - On the admindb page, a link is included to more easily reload
- the page.
-
- - The Sendmail.py delivery module is sabotaged so that it can't be
- used naively. You need to read the comments in the file and
- edit the code to use this unsafe module.
-
- - When a member sends a `help' command to the request address,
- the url to their options page is included in the response.
-
- - Autoresponses, -request command responses, and posting hold
- notifications are inhibited for any message that has a
- Precedence: {bulk|list|junk} header. This is to avoid mail
- loops between email 'bots. If the original message has an
- X-Ack: yes header, the response is sent.
-
- Responses are also limited to a maximum number per day, as
- defined in the site variable MAX_AUTORESPONSES_PER_DAY. This is
- another guard against 'bot loops, and it defaults to 10.
-
- - When a Reply-To: header is munged to include both the original
- and the list address, the list address is always added last.
-
- - The cron/mailpasswds script has grown a -l/--listname option.
-
- - The cron/disabled script has grown options to send out
- notifications for reasons other than bounce-disabled. It has
- also grown a -f/--force option. See cron/disabled --help for
- details.
-
- - The bin/dumpdb script has grown a -n/--noprint option.
-
- - An experimental new mechanism for processing incoming messages
- has been added. If you can configure your MTA to do qmail-style
- Maildir delivery, Mailman now has a MaildirRunner qrunner. This
- may turn out to be much more efficient and scalable, but for
- MM2.1, it will not be officially supported. See Defaults.py.in
- and Mailman/Queue/MaildirRunner.py for details.
-
-2.1 beta 2 (05-May-2002)
-
- Lots of bug fixing, and the following new features and changes:
-
- - A "de-mime" content filter feature has been added. This
- oft-requested feature allows you to specify MIME types that
- Mailman should strip off of any messages before they're posted
- to the list. You can also optionally convert text/html to
- text/plain (by default, through lynx if it's available).
-
- - Changes to the way the RFC 2919 and 2369 headers (i.e. the
- List-*: headers) are added:
- o List-Id: is always added
- o List-Post:, List-Help:, List-Subscribe:,
- List-Unsubscribe:, and List-Archive: are only added to
- posting messages.
- o X-List-Administrivia: is only added to messages Mailman
- creates and sends out of its own accord.
-
- Also, if the site administrator allows it, list owners can
- suppress the addition of all the List-*: headers. List owners
- can also separately suppress the List-Post: header for
- announce-only lists.
-
- - A new framework for email commands has been added. This allows
- you to easily add, delete, or change the email commands that
- Mailman understands, on a per-site, per-list, or even per-user
- basis.
-
- - Users can now change their digest delivery type from MIME to
- plain text globally, for all lists they are subscribed to.
-
- - No language select pulldowns are shown if the list only supports
- one language.
-
- - More mylist-admin eradication.
-
- - Several performance improvements in the bounce qrunner, one of
- which is to make it run only once per minute instead of once per
- second.
-
- - Korean language support as been added.
-
- - Gatewaying from news -> mail uses its connections to the nntpd
- more efficiently.
-
- - In bin/add_members, -n/--non-digest-members-file command line
- switch is deprecated in favor of -r/--regular-members-file.
-
- - bin/sync_members grew a -g/--goodbye-msg switch.
-
-2.1 beta 1 (16-Mar-2002)
-
- In addition to the usual bug fixes, performance improvements, and
- GUI changes, here are the highlights:
-
- - MIME and other message handling
- o More robustness against badly MIME encapsulated messages: if
- a MessageParseError is raised during the initial parse, the
- message can either be discarded or saved in qfiles/bad,
- depending on the value of the new configuration variable
- QRUNNER_SAVE_BAD_MESSAGES.
-
- o There is a new per-user option that can be used to avoid
- receipt of extra copies, when a member of the list is also
- explicitly CC'd.
-
- o Always add an RFC 2822 Date: header if missing, since not
- all MTAs insert one automatically.
-
- o The Sender: and Errors-To: headers are no longer added to
- outgoing messages.
-
- o Headers and footers are always added by concatenation, if
- the message is not MIME and if the list's charset is a
- superset of us-ascii.
-
- - List administration
- o An `invitation' feature has been added. This is selectable
- as a radio button on the mass subscribe page. When
- selected, users are invited to join instead of immediately
- joined, i.e. they get a confirmation message.
-
- o You can now enable and disable list owner notifications for
- disabled-due-to-bouncing and removal-due-to-bouncing
- actions. The site config variables
- DEFAULT_BOUNCE_NOTIFY_OWNER_ON_DISABLE and
- DEFAULT_BOUNCE_NOTIFY_OWNER_ON_REMOVAL control the default
- behavior.
-
- o List owners can now decide whether they receive unrecognized
- bounce messages or not (i.e. messages that the bounce
- processor doesn't recognize). Site admins can set the
- default value for this flag with the config variable
- DEFAULT_BOUNCE_UNRECOGNIZED_GOES_TO_LIST_OWNER.
-
- o The admindb summary page gives the option of clearing the
- moderation flag of members who are on quarantined.
-
- o The action to take when a moderated member posts to a list
- is now configurable. The message can either be held,
- rejected (bounced), or discarded. If the message is
- rejected, a rejection notice string can be given.
-
- o In the General admin page, you can now set the default value
- for five per-user flags: concealing the user's email
- address, acknowledging posts sent by the user, copy
- suppression, not-me-too selection, and the default digest
- type. Site admins can set the default bit field with the
- new DEFAULT_NEW_MEMBER_OPTIONS variable.
-
- o A new "Emergency brake" feature for turning on moderation of
- all list postings. This is useful for when flamewars break
- out, and the list needs a cooling off period. Messages
- containing an Approved: header with the list owner password
- are still allowed through, as are messages approved through
- the admindb interface.
-
- o When a moderated message is approved for the list, add an
- X-Mailman-Approved-At: header which contains the timestamp
- of the approval action (changed from X-Moderated: with a
- different format).
-
- o Lists can now be converted to using a less error prone
- mechanism for variable substitution syntax in headers and
- footers. Instead of %(var)s strings, you'd use $var
- strings. You must use "bin/withlist -r convert" to enable
- this.
-
- o When moderating held messages, the header text box and the
- message excerpt text box are now both read-only.
-
- o You can't delete the site list through the web.
-
- o When creating new lists through the web, you have the option
- of setting the "default member moderation" flag.
-
- - Security and privacy
- o New feature: banned subscription addresses. Privacy
- options/subscription rules now have an additional list box
- which can contain addresses or regular expressions.
- Subscription requests from any matching address are
- automatically rejected.
-
- o Membership tests which compare message headers against list
- rosters are now more robust. They now check, by default
- these header in order: From:, unixfrom, Reply-To:, Sender:.
- If any match, then the membership test succeeds.
-
- o ALLOW_SITE_ADMIN_COOKIES is a new configuration variable
- which says whether to allow AuthSiteAdmin cookies or not.
- Normally, when a list administrator logs into a list with
- the site password, they are issued a cookie that only allows
- them to do administration for this one list. By setting
- ALLOW_SITE_ADMIN_COOKIES to 1, the user only needs to
- authenticate to one list with the site password, and they
- can administer any mailing list.
-
- I'm not sure this feature is wise, so the default value for
- ALLOW_SITE_ADMIN_COOKIES is 0.
-
- o Marc MERLIN's new recipes for secure Linuxes have been
- updated.
-
- o DEFAULT_PRIVATE_ROSTER now defaults to 1.
-
- o Passwords are no longer included in the confirmation pages.
-
- - Internationalization
- o With the approval of Tamito KAJIYAMA, the Japanese codecs
- for Python are now included automatically, so you don't need
- to download and install these separate. It is installed in
- a Mailman-specific place so it won't affect your larger
- Python installation.
-
- o The configure script will produce a warning if the Chinese
- codes are not installed. This is not a fatal error.
-
- o Russian templates and catalogs have been added.
-
- o Finnish templates and catalogs have been added.
-
- - Scripts and utilities
- o New program bin/unshunt to safely move shunted messages back
- into the appropriate processing queue.
-
- o New program bin/inject for sending a plaintext message into
- the incoming queue from the command line.
-
- o New cron script cron/disabled for periodically culling the
- disabled membership.
-
- o bin/list_members has grown some new command line switches
- for filtering on different criteria (digest mode, disable
- mode, etc.)
-
- o bin/remove_members has grown the --fromall switch.
-
- o You can now do a bin/rmlist -a to remove an archive even
- after the list has been deleted.
-
- o bin/update removes the $prefix/Mailman/pythonlib directory.
-
- o bin/withlist grows a --all/-a flag so the --run/-r option
- can be applied to all the mailing lists. Also, interactive
- mode is now the default if -r isn't used. You don't need to
- run this script as "python -i bin/withlist" anymore.
-
- o There is a new script contrib/majordomo2mailman.pl which
- should ease the transition from Majordomo to Mailman.
-
- - MTA integration
- o Postfix integration has been made much more robust, but now
- you have to set POSTFIX_ALIAS_CMD and POSTFIX_MAP_CMD to
- point to the postalias and postmap commands respectively.
-
- o VERP-ish delivery has been made much more efficient by
- eliminating extra disk copies of messages for each recipient
- of a VERP delivery. It has also been made more robust in
- the face of failures during chunk delivery. This required a
- rewrite of SMTPDirect.py and one casualty of that rewrite
- was the experimental threaded delivery. It is no longer
- supported (but /might/ be resurrected if there's enough
- demand -- or a contributed patch :).
-
- o A new site config variable SMTP_MAX_SESSIONS_PER_CONNECTION
- specifies how many consecutive SMTP sessions will be
- conducted down the same socket connection. Some MTAs have a
- limit on this.
-
- o Support for VERP-ing confirmation messages. These are less
- error prone since the Subject: header doesn't need to be
- retained, and they allow a more user friendly (and i18n'd)
- Subject: header. VERP_CONFIRM_FORMAT, VERP_CONFIRM_REGEXP,
- and VERP_CONFIRMATIONS control this feature (only supported
- for invitation confirmations currently, but will be expanded
- to the other confirmations).
-
- o Several new list-centric addresses have been added:
- -subscribe and -unsubscribe are synonyms for -join and
- -leave, respectively. Also -confirm has been added to
- support VERP'd confirmations.
-
- - Archiver
- o There's now a default page for the Pipermail archive link
- for when no messages have yet been posted to the list.
-
- o Just the mere presence of an X-No-Archive: is enough to
- inhibit archiving for this message; the value of the header
- is now ignored.
-
- - Configuring, building, installing
- o Mailman now has a new favicon, donated by Terry Oda. Not
- all web pages are linked to the favicon yet though.
-
- o The add-on email package is now distributed and installed
- automatically, so you don't need to do this. It is
- installed in a Mailman-specific place so it won't affect
- your larger Python installation.
-
- o The default value of VERP_REGEXP has changed.
-
- o New site configuration variables BADQUEUE_DIR and
- QRUNNER_SAVE_BAD_MESSAGES which describe where to save
- messages which are not properly MIME encoded.
-
- o configure should be more POSIX-ly conformant.
-
- o The Mailman/pythonlib directory has been removed, but a new
- $prefix/pythonlib directory has been added.
-
- o Regression tests are now installed.
-
- o The second argument to add_virtual() calls in mm_cfg.py are
- now optional.
-
- o DEFAULT_FIRST_STRIP_REPLY_TO now defaults to 0.
-
- o Site administrators can edit the Mailman/Site.py file to
- customize some filesystem layout policies.
-
-
-2.1 alpha 4 (31-Dec-2001)
-
- - The administrative requests database page (admindb) has been
- redesigned for better usability when there are lots of held
- postings. Changes include:
- o A summary page which groups held messages by sender email
- address. On this page you can dispose of all the sender's
- messages in one action. You can also view the details of
- all the sender's messages, or the details of a single
- message. You can also add the sender to one of the list's
- sender filters.
-
- o A details page where you can view all messages, just those
- for a particular sender, or just a single held message.
- This details page is laid out the same as the old admindb
- page.
-
- o The instructions have been shorted on the summary and
- details page, with links to more detailed explanations.
-
- - Bounce processing
- o Mailman now keeps track of the reason a member's delivery
- has been disabled: explicitly by the administrator,
- explicitly by the user, by the system due to excessive
- bounces, or for (legacy) unknown reasons.
-
- o A new bounce processing algorithm has been implemented (we
- might actually understand this one ;). When an address
- starts bouncing, the member gets a "bounce score". Hard
- (fatal) bounces score 1.0, while soft (transient) bounces
- score 0.5.
-
- List administrators can specify a bounce threshold above
- which a member gets disabled. They can also specify a time
- interval after which, if no bounces are received from the
- member, the member's bounce score is considered stale and is
- thrown away.
-
- o A new cron script, cron/disabled, periodically sends
- notifications to members who are bounce disabled. After a
- certain number of warnings the member is deleted from the
- list. List administrators can control both the number of
- notifications and the amount of time between notifications.
-
- Notifications include a confirmation cookie that the member
- can use to re-enable their subscription, via email or web.
-
- o New configuration variables to support the bounce processing
- are DEFAULT_BOUNCE_SCORE_THRESHOLD,
- DEFAULT_BOUNCE_INFO_STALE_AFTER,
- DEFAULT_BOUNCE_YOU_ARE_DISABLED_WARNINGS,
- DEFAULT_BOUNCE_YOU_ARE_DISABLED_WARNINGS_INTERVAL.
-
- - Privacy and security
- o Sender filters can now be regular expressions. If a line
- starts with ^ it is taken as a (raw string) regular
- expression, otherwise it is a literal email address.
-
- o Fixes in 2.0.8 ported forward: prevent cross-site scripting
- exploits.
-
- - Mail delivery
- o Aliases have all been changed so that there's more
- consistency between the alias a message gets delivered to,
- and the script & queue runner that handles the message.
-
- I've also renamed the mail wrapper script to `mailman' from
- `wrapper' to avoid collisions with other MLM's. You /will/
- need to regenerate your alias files with bin/genaliases, and
- you may need to update your smrsh (Sendmail) configs.a
-
- Bounces always go to listname-bounces now, since
- administration has been separated from bounce processing.
- listname-admin is obsolete.
-
- o VERP support! This greatly improves the accuracy of bounce
- detection. Configuration variables which control this feature
- include VERP_DELIVERY_INTERVAL, VERP_PERSONALIZED_DELIVERIES,
- VERP_PASSWORD_REMINDERS, VERP_REGEXP, and VERP_FORMAT. The
- latter two must be tuned to your MTA.
-
- o A new alias mailman-loop@dom.ain is added which directs all
- output to the file $prefix/data/owner-bounces.mbox. This is
- used when sending messages to the site list owners, as the
- final fallback for bouncing messages.
-
- o New configuration variable POSTFIX_STYLE_VIRTUAL_DOMAINS
- which should be set if you are using the Postfix MTA and
- want Mailman to play nice with Postfix-style virtual
- domains.
-
- - Miscellaneous
- o Better interoperability with Python 2.2.
-
- o MailList objects now record the date (in seconds since
- epoch) that they were created. This is in a hidden
- attribute `created_at'.
-
- o bin/qrunner grows a -s/--subproc switch which is usually
- used only when it's started from mailmanctl.
-
- o bin/newlist grows a -l/--language option so that the list's
- preferred language can be set from the command line.
-
- o cron changes: admin reminders go out at 8am local time instead
- of 10pm local time.
-
- - Pipermail archiver
- o MIME attachments are scrubbed out into separate files which
- can be viewed by following a link in the original article.
- Article contains an indication of the size of the
- attachment, its type, and other useful information.
-
- o New script bin/cleanarch which can be used to `clean' an
- .mbox archive file by fixing unescaped embedded Unix From_
- lines.
-
- o New configuration variable ARCHIVE_SCRUBBER in
- Defaults.py.in which names the module that Pipermail should
- use to scrub articles of MIME attachments.
-
- o New configuration variable ARCHIVE_HTML_SANITIZER which
- describes how the scrubber should handle text/html
- attachments.
-
- o PUBLIC_ARCHIVE_URL has change its semantics. It is now an
- absolute url, with the hostname and listname parts
- interpolated into it on a per-list basis.
-
- o Pipermail should now provide the proper character set in the
- Content-Type: header for archived articles.
-
- - Internationalization
- o Czech translations by Dan Ohnesorg.
-
- o The Hungarian charset has be fixed to be iso-8859-2.
-
- o The member options login page now has a language selection
- widget.
-
- - Building, configuration
- o email-0.96 package is required (see the misc directory).
-
- o New recipes for integrating Mailman and Sendmail,
- contributed by David Champion.
-
-
-2.1 alpha 3 (22-Oct-2001)
-
- - Realname support
- o Mailman now tracks a member's Real Name in addition to their
- email address.
-
- o List members can now supply their Real Names when
- subscribing via the web. Their Real Names are parsed from
- any thru-email subscriptions.
-
- o Members can change their Real Names on their options page,
- and admins can change members' Real Names on the membership
- pages. Mass subscribing accepts "email@dom.ain (Real Name)"
- and "Real Name <email@dom.ain>" entries, for both
- in-text-box and file-upload mass subscriptions.
-
- - Filtering and Privacy
- o Reply-To: munging has been enhanced to allow a wider range
- of list policies. You can now pre-strip any Reply-To:
- headers before adding list-specific ones (i.e. you can
- override or extend existing Reply-To: headers). If
- stripping, the old headers are no longer saved on
- X-Reply-To:
-
- o New sender moderation rules. The old `posters',
- `member_only_posting', `moderated' and `forbidden_posters'
- options have been removed in favor of a new moderation
- scheme. Each member has a personal moderation bit, and
- non-member postings can be automatically accepted, held for
- approval, rejected (bounced) or discarded.
-
- o When membership rosters are private, responses to
- subscription (and other) requests are made more generic so
- that these processes can't be covertly mined for hidden
- addresses. If a subscription request comes in for a user
- who is already subscribed, the user is notified of potential
- membership mining.
-
- o When a held message is approved via the admindb page, an
- X-Moderated: header is added to the message.
-
- o List admins can now set an unsubscribe policy which requires
- them to approve of member unsubscriptions.
-
- - Web U/I
- o All web confirmations now require a two-click procedure,
- where the first click gives them a page that allows them to
- confirm or cancel their subscription. It is bad form for an
- email click (HTTP GET) to have side effects.
-
- o Lots of improvements for clarity.
-
- o The Privacy category has grown three subcategories.
-
- o The General options page as a number of subsection headers.
-
- o The Passwords and Languages categories are now on separate
- admin pages.
-
- o The admin subcategories are now formated as two columns in
- the top and bottom legends.
-
- o When creating a list through the web, you can now specify
- the initial list of supported languages.
-
- o The U/I for unsubscribing a member on the admin's membership
- page should be more intuitive now.
-
- o There is now a separate configuration option for whether the
- goodbye_msg is sent when a member is unsubscribed.
-
- - Performance
- o misc/mailman is a Unix init script, appropriate for
- /etc/init.d, and containing chkconfig hooks for systems that
- support it.
-
- o bin/mailmanctl has been rewritten; the `restart' command
- actually works now. It now also accepts -s, -q, and -u
- options.
-
- o bin/qrunner has been rewritten too; it can serve the role of
- the old cron/qrunner script for those who want classic
- cron-invoked mail delivery.
-
- o Internally, messages are now stored in the qfiles directory
- primarily as pickles. List configuration databases are now
- stored as pickles too (i.e. config.pck). bin/dumpdb knows
- how to display both pickles and marshals.
-
- - Mail delivery
- o If a user's message is held for approval, they are sent a
- notification message containing a confirmation cookie. They
- can use this confirmation cookie to cancel their own
- postings (if they haven't already been approved).
-
- o When held messages are forwarded to an explicit address
- using the admindb page, it is done so in a message/rfc822
- encapsulation.
-
- o When a message is first held for approval, the notification
- sent to the list admin is a 3-part multipart/mixed. The
- first part holds the notification message, the second part
- hold the original message, and the third part hold a cookie
- confirmation message, to which the admin can respond to
- approve or discard the message via email.
-
- o In the mail->news gateway, you can define mail headers that
- must be modified or deleted before the message can be posted
- to the nntp server.
-
- o The list admin can send an immediate urgent message to the
- entire list membership, bypassing digest delivery. This is
- done by adding an Urgent: header with the list password.
- Urgent messages with an invalid password are rejected.
-
- o Lists can now optionally personalize email messages, if the
- site admin allows it. Personalized messages mean that the
- To: header includes the recipient's address instead of the
- list's address, and header and footer messages can contain
- user-specific information. Note that only regular
- deliveries can currently be personalized.
-
- o Message that come from Usenet but that have broken MIME
- boundaries are ignored.
-
- o If the site administrator agrees, list owners have the
- ability to disable RFC 2369 List-* headers.
-
- o There is now an API for an external process to post a
- message to a list. This posting process can also specify an
- explicit list of recipients, in effect turning the mailing
- list into a "virtual list" with a fluid membership. See
- Mailman/Post.py for details.
-
- - Building/testing/configuration
- o mimelib is no longer required, but you must install the
- email package (see the tarball in the misc directory).
-
- o An (as yet) incomplete test suite has been added. Don't try
- running it in a production environment!
-
- o Better virtual host support by adding a mapping from the
- host name given in cgi's HTTP_HOST/SERVER_NAME variable to
- the email host used in list addresses. (E.g. www.python.org
- maps to @python.org).
-
- o Specifying urls to external public archivers is more
- flexible.
-
- o The filters/ subdirectory has been removed.
-
- o There is now a `site list' which is a mailing list that must
- be created first, and from which all password reminders
- appear to come from. It is recommended that this list be
- called "mailman@your.site".
-
- o bin/move_list is no longer necessary (see the FAQ for
- detailed instructions on renaming a list).
-
- o A new script bin/fix_url.py can be used with bin/withlist to
- change a list's web_page_url configuration variable (since
- it is no longer modifiable through the web).
-
- - Internationalization
- o Support for German, Hungarian, Italian, Japanese, and
- Norwegian have been added.
-
- - Miscellaneous
- o Lots of new bounce detectors. Bounce detectors can now
- discard temporary bounce messages by returning a special
- Stop value.
-
- o bin/withlist now sports a -q/--quiet flag.
-
- o bin/add_members has a new -a/--admin-notify flag which can
- be used to inhibit list owner notification for each
- subscription.
-
- - Membership Adaptors
- o Internally, mailing list memberships are accessed through a
- MemberAdaptor interface. This would allow for integrating
- membership databases with external sources (e.g. Zope or
- LDAP), although the only MemberAdaptor currently implemented
- is a "classic" adaptor which stores the membership
- information on the MailList object.
-
- o There's a new pipeline handler module called FileRecips.py
- which could be used to get all regular delivery mailing list
- recipients from a Sendmail-style :include: file (see List
- Extensibility bullet below).
-
- This work was sponsored by Control.com
-
- - List Extensibility
- o A framework has been added which can be used to specialize
- and extend specific mailing lists. If there is a file
- called lists/<yourlist>/extend.py, it is execfile()'d after
- the MailList object is instantiated. The file should
- contain a function extend() which will be called with the
- MailList instance. This function can do all sorts of deep
- things, like modify the handler pipeline just for this list,
- or even strip out particular admin GUI elements (see below).
-
- o All the admin page GUI elements are now separate
- components. This provides greater flexibility for list
- customization. Also, each GUI element will be given an
- opportunity to handle admin CGI form data.
-
- This work was sponsored by Control.com
-
- - Topic Filters
- o A new feature has been added called "Topic Filters". A list
- administrator can create topics, which are essentially
- regular expression matches against Subject: and Keyword:
- headers (including such pseudo-headers if they appear in the
- first few lines of the body of a message).
-
- List members can then `subscribe' to various topics, which
- allows them to filter out any messages that don't match a
- topic, or to filter out any message that does match a
- topic. This can be useful for high volume lists where not
- everyone will be interested in every message.
-
- This work was sponsored by Control.com
-
-2.1 alpha 2 (11-Jul-2001)
-
- - Building
- o mimelib 0.4 is now required. Get it from
- http://mimelib.sf.net. If you've installed an earlier
- version of mimelib, you must upgrade.
-
- o /usr/local/mailman is now the default installation
- directory. Use configure's --prefix switch to change it
- back to the default (/home/mailman) or any other
- installation directory of your choice.
-
- - Security
- o Better definition of authentication domains. The following
- roles have been defined: user, list-admin, list-moderator,
- creator, site-admin.
-
- o There is now a separate role of "list moderator", which has
- access to the pending requests (admindb) page, but not the
- list configuration pages.
-
- o Subscription confirmations can now be performed via email or
- via URL. When a subscription is received, a unique (sha)
- confirm URL is generated in the confirmation message.
- Simply visiting this URL completes the subscription process.
-
- o In a similar manner, removal requests (via web or email
- command) no longer require the password. If the correct
- password is given, the removal is performed immediately. If
- no password is given, then a confirmation message is
- generated.
-
- - Internationalization
- o More I18N patches. The basic infrastructure should now be
- working correctly. Spanish templates and catalogs are
- included, and English, French, Hungarian, and Big5 templates
- are included.
-
- o Cascading specializations and internationalization of
- templates. Templates are now search for in the following
- order: list-specific location, domain-specific location,
- site-wide location, global defaults. Each search location
- is further qualified by the language being displayed. This
- means that you only need to change the templates that are
- different from the global defaults.
-
- Templates renamed: admlogin.txt => admlogin.html
- Templates added: private.html
-
- - Web UI
- o Redesigned the user options page. It now sits behind an
- authentication so user options cannot be viewed without the
- proper password. The other advantage is that the user's
- password need not be entered on the options page to
- unsubscribe or change option values. The login screen also
- provides for password mail-back, and unsubscription w/
- confirmation.
-
- Other new features accessible from the user options page
- include: ability to change email address (with confirmation)
- both per-list and globally for all list on virtual domain;
- global membership password changing; global mail delivery
- disable/enable; ability to suppress password reminders both
- per-list and globally; logout button.
-
- [Note: the handle_opts cgi has gone away]
-
- o Color schemes for non-template based web pages can be defined
- via mm_cfg.
-
- o Redesign of the membership management page. The page is now
- split into three subcategories (Membership List, Mass
- Subscription, and Mass Removal). The Membership List
- subcategory now supports searching for member addresses by
- regular expression, and if necessary, it groups member
- addresses first alphabetically, and then by chunks.
-
- Mass Subscription and Mass Removal now support file upload,
- with one address per line.
-
- o Hyperlinks from the logos in the footers have been removed.
- The sponsors got too much "unsubscribe me!" spam from
- desperate user of Mailman at other sites.
-
- o New buttons on the digest admin page to send a digest
- immediately (if it's non-empty), to start a new digest
- volume with the next digest, and to select the interval with
- which to automatically start a new digest volume (yearly,
- monthly, quarterly, weekly, daily).
-
- DEFAULT_DIGEST_VOLUME_FREQUENCY is a new configuration
- variable, initially set to give a new digest volume monthly.
-
- o Through-the-web list creation and removal, using a separate
- site-wide authentication role called the "list creator and
- destroyer" or simply "list creator". If the configuration
- variable OWNERS_CAN_DELETE_THEIR_OWN_LISTS is set to 1 (by
- default, it's 0), then list admins can delete their own
- lists.
-
- This feature requires an adaptor for the particular MTA
- you're using. An adaptor for Postfix is included, as is a
- dumb adaptor that just emails mailman@yoursite with the
- necessary Sendmail style /etc/alias file changes. Some MTAs
- like Exim can be configured to automatically recognize new
- lists. The adaptor is selected via the MTA option in
- mm_cfg.py
-
- - Email UI
- o In email commands, "join" is a synonym for
- "subscribe". "remove" and "leave" are synonyms for
- "unsubscribe". New robot addresses are support to make
- subscribing and unsubscribing much easier:
-
- mylist-join@mysite
- mylist-leave@mysite
-
- o Confirmation messages have a shortened Subject: header,
- containing just the word "confirm" and the confirmation
- cookie. This should help for MUAs that like to wrap long
- Subject: lines, messing up confirmation.
-
- o Mailman now recognizes an Urgent: header, which, if it
- contains the list moderator or list administrator password,
- forces the message to be delivered immediately to all
- members (i.e. both regular and digest members). The message
- is also placed in the digest. If the password is incorrect,
- the message will be bounced back to the sender.
-
- - Performance
- o Refinements to the new qrunner subsystem which preserves
- FIFO order of messages.
-
- o The qrunner is no longer started from cron. It is started
- by a Un*x init-style script called bin/mailmanctl (see
- below). cron/qrunner has been removed.
-
- - Command line scripts
- o bin/mailmanctl script added, which is used to start, stop,
- and restart the qrunner daemon.
-
- o bin/qrunner script added which allows a single sub-qrunner
- to run once through its processing loop.
-
- o bin/change_pw script added (eases mass changing of list
- passwords).
-
- o bin/update grows a -f switch to force an update.
-
- o bin/newlang renamed to bin/addlang; bin/rmlang removed.
-
- o bin/mmsitepass has grown a -c option to set the list
- creator's password. The site-wide `create' web page is
- linked to from the admin overview page.
-
- o bin/newlist's -o option is removed. This script also grows
- a way of spelling the creation of a list in a specific
- virtual domain.
-
- o The `auto' script has been removed.
-
- o bin/dumpdb has grown -m/--marshal and -p/--pickle options.
-
- o bin/list_admins can be used to print the owners of a mailing list.
-
- o bin/genaliases regenerates from scratch the aliases and
- aliases.db file for the Postfix MTA.
-
- - Archiver
- o New archiver date clobbering option, which allows dates to
- only be clobber if they are outrageously out-of-date
- (default setting is 15 days on either side of received
- timestamp). New configuration variables:
-
- ARCHIVER_CLOBBER_DATE_POLICY
- ARCHIVER_ALLOWABLE_SANE_DATE_SKEW
-
- The archived copy of messages grows an X-List-Received-Date:
- header indicating the time the message was received by
- Mailman.
-
- o PRIVATE_ARCHIVE_URL configuration variable is removed (this
- can be calculated on the fly, and removing it actually makes
- site configuration easier).
-
- - Miscellaneous
- o Several new README's have been added.
-
- o Most syslog entries for the qrunner have been redirected to
- logs/error.
-
- o On SIGHUP, qrunner will re-open all its log files and
- restart all child processes. See "bin/mailmanctl restart".
-
- - Patches and bug fixes
- o SF patches and bug fixes applied: 420396, 424389, 227694,
- 426002, 401372 (partial), 401452.
-
- o Fixes in 2.0.5 ported forward:
- Fix a lock stagnation problem that can result when the
- user hits the `stop' button on their browser during a
- write operation that can take a long time (e.g. hitting
- the membership management admin page).
-
- o Fixes in 2.0.4 ported forward:
- Python 2.1 compatibility release. There were a few
- questionable constructs and uses of deprecated modules
- that caused annoying warnings when used with Python 2.1.
- This release quiets those warnings.
-
- o Fixes in 2.0.3 ported forward:
- Bug fix release. There was a small typo in 2.0.2 in
- ListAdmin.py for approving an already subscribed member
- (thanks Thomas!). Also, an update to the OpenWall
- security workaround (contrib/securelinux_fix.py) was
- included. Thanks to Marc Merlin.
-
-2.1 alpha 1 (04-Mar-2001)
-
- - Python 2.0 or newer required. Also required is `mimelib' a new
- library for handling MIME documents. This will be bundled in
- future releases, but for now, you must download and install it
- (using Python's distutils) from
-
- http://barry.wooz.org/software/Code/mimelib-0.2.tar.gz
-
- You need mimelib 0.2 or better.
-
- - Redesigned qrunner subsystem. Now there are multiple message
- queues, and considerable flexibility in file formats for
- integration with external systems. The current crop of queues
- include:
-
- archive -- for posting messages to an archiver
- commands -- for incoming email commands and bounces
- in -- for list-destined incoming email
- news -- for messages outgoing to a nntp server
- out -- for messages outgoing to a smtp server
- shunt -- for messages that trigger unexpected exceptions in Mailman
- virgin -- for messages that are generated by Mailman
-
- cron/qrunner is now a long running script that forks off
- sub-runners for each of the above queues. qrunner still plays
- nice with cron, but it is expected to be started by init at some
- point in the future. Some support exists for parallel
- processing of messages in the queues.
-
- - Support for internationalization support merged in. Original
- work done by Juan Carlos Rey Anaya and Victoriano Giralt. I've
- tested about 90% of the web side, 50% of the email, and 50% of
- the command line / cron scripts.
-
- New scripts: bin/newlang, bin/rmlang
-
- - New delivery script `auto' for automatic integration with the
- Postfix MTA.
-
- - A bunch of new bounce detectors.
-
- Changes ported from Mailman 2.0.2 and 2.0.1:
-
- - A fix for a potential privacy exploit where a clever list
- administrator could gain access to user passwords. This doesn't
- allow them to do much more harm to the user then they normally
- could, but they still shouldn't have access to the passwords.
-
- - In the admindb page, don't complain when approving a
- subscription of someone who's already on the list (SF bug
- #222409 - Thomas Wouters).
-
- Also, quote for HTML the Subject: text printed for held
- messages, otherwise messages with e.g. "Subject: </table>" could
- royally screw page formatting.
-
- - Docstring fix bin/newlist to remove mention of "immediate"
- argument (Thomas Wouters).
-
- - Fix for bin/update when PREFIX != VAR_PREFIX (SF bug #229794 --
- Thomas Wouters).
-
- - Bug fix release, namely fixes a buglet in bin/withlist affecting
- the -l and -r flags; also a problem that can cause qrunner to
- stop processing mail after disk-full events (SourceForge bug
- 127199).
-
-2.0 final (21-Nov-2000)
-
- No changes from rc3.
-
-2.0 release candidate 3 (16-Nov-2000)
-
- - By popular demand, Reply-To: munging policy is now to always
- override any Reply-To: header in the original message, if
- reply_goes_to_list is set to "This list" or "Explicit Address"
-
- - bin/newlist given -q/--quiet flag instead of the <immediate>
- positional argument
-
- - Hopefully last fix to DEFAULT_URL not ending in a slash
- sensitivity
-
- - 2.0rc2 buglets fixed:
- o newlist argument parsing
- o updating with unlocked lists
- o HyperArch.py traceback when there's no
- Content-Transfer-Encoding: header
-
- - SourceForge bugs fixed:
- 122358 (qmail-to-mailman.py listname case folding)
-
- - SourceForge patches applied:
- 102373 (qmail-to-mailman.py listname case folding)
-
-2.0 release candidate 2 (10-Nov-2000)
-
- - Documentation updates: start in the doc/ directory.
-
- - bin/withlist accepts additional command line arguments when used
- with the --run flag; bin/mmsitepass and bin/newlist accept
- -h/--help flags
-
- - bin/newlist has a -o/--output flag to append /etc/aliases
- suggestions to a specified file
-
- - SourceForge bugs fixed:
- 116615 (README.BSD update), 117015 (duplicate messages on
- moderated posts), 117548 (exception in HyperArch.py), 117682
- (typos), 121185 (vsnprintf signature), 121591 and 122017
- (bogus link after web unsubscribe), 121811 (`subscribe' in
- Subject: doesn't get archived)
-
- - SourceForge patches applied:
- 101812 (securelinux_fix.py contrib), 102097 (fix for bug
- 117548), 102211 (additional args for withlist), 102268 (case
- insensitive Content-Transfer-Encoding:)
-
-2.0 release candidate 1 (23-Oct-2000)
-
- - Bug fixes and security patches.
-
- - Better html rendition of articles in non us-ascii charsets
- (Jeremy Hylton). See VERBATIM_ENCODING variable in
- Defaults.py.in for customization.
-
-2.0 beta 6 (22-Sep-2000)
-
- - Building
- o Tested with Python 1.5.2, Python 1.6, and Python 2.0 beta 1.
- Conducted on RH Linux 6.1 only, but should work
- cross-platform.
-
- o Configure now accepts --with-username, --with-groupname,
- --with-var-prefix flags. See `configure --help' or the
- INSTALL file for details.
-
- o Setting the CFLAGS environment variable before invoking
- configure now works.
-
- o The icons are now copied into $prefix/icons at install time.
- Patch by David Champion.
-
- - Standards
- o Compliance with RFC 2369 (List-*: headers). Patch by
- Darrell Fuhriman. List-ID: header is kept for historical
- reasons.
-
- o Fixes by Jeremy Hylton to Pipermail in support of non-ASCII
- charsets, based on the Content-Type: and encoded-words in
- the original message. Mail headers are now decoded as per
- RFC 2047.
-
- o Many more bounce formats are detected: Microsoft's SMTPSVC,
- Compuserve, GroupWise, SMTP32, and the more generic
- SimpleMatch (which catches lots of similar but slightly
- different formats).
-
- - Defaults
- o Email addresses can now be obscured in Pipermail archives by
- setting mm_cfg.ARCHIVER_OBSCURES_EMAILADDRS to 1 (obscuring
- is turned off by default). Patch provided by Chris Snell.
-
- o The default NNTP host can now be set by editing
- mm_cfg.DEFAULT_NNTP_HOST. Patch by David Champion.
-
- o The default archiving mode (public/private) can now be set
- by editing mm_cfg.DEFAULT_ARCHIVE. Patch by Ted Cabeen.
-
- - Web UI
- o The variable details pages in the administrators interface
- is now `live', i.e. there's a submit button on the details
- page.
-
- o A link to the administrative interface is placed in the
- footer of the general user pages (authentication still
- required, of course!)
-
- o The user options change results page has a link back to the
- user's main page.
-
- o In the admindb page (for dealing with held postings), the
- default forward address is now listname-owner instead of
- listname-admin. This avoids bounce detection on the
- forwarded message.
-
- - Miscellaneous
- o Fixed config.db corruption problem when disk-full errors are
- encountered.
-
- o Command line scripts accept list names case-insensitively.
-
- o bin/remove_members takes a -a flag to remove all members of
- a list in one fell swoop.
-
- o List admin passwords must be non-empty.
-
- o Mailman generated passwords are slightly more mnemonic, and
- shouldn't have confusing character selections (i.e. `i'
- only, but no `1' or `l').
-
- o Crossposting to two gated mailing lists should be fixed.
-
- o Many other bug fixes and minor web UI improvements.
-
-2.0 beta 5 (01-Aug-2000)
-
- - Bug fix release. This includes a fix for a small security hole
- which could be exploited to gain mailman group access by a local
- user (not a mail or web user).
-
- - As part of the fix for the "cookie reauthorization" bug, only
- session cookies are used now. This means that administrative
- and private archive cookies expire only when the browser session
- is quit, however an explicit "Logout" button has been added.
-
-2.0 beta 4 (06-Jul-2000)
-
- - Bug fix release.
-
-2.0 beta 3 (29-Jun-2000)
-
- - Delivery mechanism (qrunner) refined to support immediate
- queuing, queuing directly from MTA, and queuing on any error
- along the delivery pipeline. This means 1) that huge lists
- can't time out the MTA's program delivery channel; 2) it is much
- harder to completely lose messages; 3) eventually, qrunner will
- be elaborated to meter delivery to the MTA so as not to swamp
- it. The tradeoff is in more disk I/O since every message coming
- into the system (and most that are generated by the system) live
- on disk for some part of their journey through Mailman.
-
- For now, see the Default.py variables QRUNNER_PROCESS_LIFETIME
- and QRUNNER_MAX_MESSAGES for primitive resource management.
-
- The API to the pipeline handler modules has changed. See
- Mailman/Handlers/HandlerAPI.py for details.
-
- - Revamped admindb web page: held messages are split into headers
- and bodies so they are easier to vette; admins can now also
- preserve a held message (for spam evidence gathering) or forward
- the message to a specified email address; disposition of held
- messages can be deferred; held messages have a more context
- meaningful default rejection message.
-
- - Change to the semantics for `acceptable_aliases' list
- configuration variable, based on suggestions by Harald Meland.
-
- - New mm_cfg.py variables NNTP_USERNAME and NNTP_PASSWORD can be
- set on a site-wide basis if connection to your nntpd requires
- authentication.
-
- - The list attribute `num_spawns' has been removed. The mm_cfg.py
- variables MAX_SPAWNS, and DEFAULT_NUM_SPAWNS removed too.
-
- - LIST_LOCK_LIFETIME cranked to 5 hours and LIST_LOCK_TIMEOUT
- shortened to 10 seconds. QRUNNER_LOCK_LIFETIME cranked up to 10
- hours. This should decrease the changes for bogus and harmful
- lock breaking.
-
- - Resent-to: is now one of the headers checked for explicit
- destinations.
-
- - Tons more bounce formats are recognized. The API to the bounce
- modules has changed.
-
- - A rewritten LockFile module which should fix most (hopefully all)
- bugs in the locking machinery. Many improvements suggested by
- Thomas Wouters and Harald Meland.
-
- - Experimental support (disabled by default) for delivering SMTP
- chunks to the MTA via multiple threads. Your Python executable
- must have been compiled with thread support enabled, and you
- must set MAX_DELIVERY_THREADS in mm_cfg.py. Note that this may
- not improve your overall system performance.
-
- - Some changes and additions to scripts: bin/find_member now
- supports a -w/--owner flag to match regexps against mailing list
- owners; bin/find_member now supports multiple regexps;
- cron/gate_news command line option changes; new script
- bin/dumbdb for debugging purposes; bin/clone_member can now also
- remove the old address and change change the list owner
- addresses.
-
- - The News/Mail gateway admin page has a button that lets you do
- an explicit catchup of the newsgroup.
-
- - The CVS repository has been moved out to SourceForge. For more
- information, see the project summary at
-
- http://sourceforge.net/project/?group_id=103
-
- - Lots 'o bug fixes and some performance improvements.
-
-2.0 beta 2 (07-Apr-2000)
-
- - Rewritten gate_news cron script which should be more efficient
- and avoid race and locking problems. Each list now maintains
- its own watermark, and when you use the admin CGI script to turn
- on gating from Usenet->mail, an automatic mass catch up is done
- to avoid flooding the mailing list. cron/gate_news's command
- line interface has also changed. See its docstring for
- details.
-
- - A new cron script called qrunner has been added to retry message
- deliveries that fail because of temporary smtpd problems.
-
- - New command line script called bin/list_lists which does exactly
- that: lists all the mailing lists on the system (much like the
- listinfo CGI does).
-
- - bin/withlist is now directly executable, however if you want to
- use python -i, you must still explicitly invoke it.
- bin/withlist also now cleans up after itself by unlocking any
- locked lists. It does NOT save any dirty lists though - you
- must do this explicitly.
-
- - $prefix permissions (and all subdirs) must now be 02775.
- bin/check_perms has been updated to fix all the subdir
- permissions.
-
- - "make update" (a.k.a. bin/update) is run automatically when you
- do a "make install"
-
- - The CGI driver script now puts information about the Python
- environment into the logs/error file (but not the diagnostic web
- page).
-
- - Bug fixes and some performance improvements
-
-2.0 beta 1 (19-Mar-2000)
-
- - Python 1.5.2 (or newer) is now required.
-
- - A new bundled auto-responder has been added. You can now
- configure an autoresponse text for each list's primary
- addresses:
-
- listname@yourhost.com -- the general posting address
- listname-request@... -- the automated "request bot" address
- listname-admin@... -- the human administrator address
-
- - The standard UI now includes three logos at the bottom of the
- page: Dragon's Mailman logo, the Python Powered logo, and the
- GNU logo. All point to their respective home pages.
-
- - It is now possible to set the Reply-To: field on lists to an
- arbitrary address. NOTE: Reply-To: munging is generally
- considered harmful! However for some read-only lists, it is
- useful to direct replies to a parallel discussion list.
-
- - There is a new message delivery architecture which uses a
- pipeline processor for incoming and internally generated
- messages. Mailman no longer contains a bundled bulk-mailer;
- instead message delivery is handled completely by the MTA. Most
- MTAs give a high enough priority to connections from the
- localhost that mail will not be lost because of system load, but
- this is not guaranteed (or handled) by Mailman currently. Be
- careful also if your smtpd is on a different host than the
- Mailman host. In practice, mail lossage has not be observed.
-
- For this reason cron/run_queue is no longer needed (see the
- UPGRADING file for details).
-
- Also, you can choose whether you want direct smtp delivery, or
- delivery via the command line to a sendmail-compatible daemon.
- You can also easily add your own delivery module. See
- Mailman/Defaults.py for details.
-
- - A similar pipeline architecture for the parsing of bounce
- messages has been added. Most common bounce formats are now
- handled, including Qmail, Postfix, and DSN. It is now much
- easier to add new bounce detectors.
-
- - The approval pending architecture has also been revamped.
- Subscription requests and message posts waiting for admin
- approval are no longer kept in the config.db file, but in a
- separate requests.db file instead.
-
- - Finally made consistent the use of Sender:/From:/From_ in the
- matching of headers for such things as member-post-only. Now,
- if USE_ENVELOPE_SENDER is true, Sender: will always be chosen
- over From:, however the default has been changed to
- USE_ENVELOPE_SENDER false so that From: is always chosen over
- Sender:. In both cases, if no header is found, From_ (i.e. the
- envelope sender is used). Note that the variable is now
- misnamed! Most people want From: matching anyway and any are
- easily spoofable.
-
- - New scripts bin/move_list, bin/config_list
-
- - cron/upvolumes_yearly, cron/upvolumes_monthly, cron/archive,
- cron/run_queue all removed. Edit your crontab if you used these
- scripts. Other scripts removed: contact_transport, deliver,
- dumb_deliver.
-
- - Several web UI improvements, especially in the admin page.
-
- - Remove X-pmrqc: headers to prevent return reciepts for Pegasus
- mail users.
-
- - Security patch when using external archivers.
-
- - Honor "X-Archive: No" header by not putting this message in the
- archive.
-
- - Changes to the log file format.
-
- - The usual bug fixes.
-
-1.1 (05-Nov-1999)
-
- - All GIFs removed. See http://www.gnu.org/philosophy/gif.html
- for the reason why.
-
- - Improvements to the Pipermail archiver which make things faster.
- Primary change is that the .txt files are not gzipped on every
- posted message. Instead, use the new cron script `nightly_gzip'
- to gzip the .txt file in batches (this means that the .txt file
- will lag behind the on-line archives a little).
-
- - From the C drivers programs, Python is invoked with the -S
- option. This tells Python to avoid importing the site module,
- which can improve start up time of the Python process
- considerably. Note that the command line script invocation has
- not been changed.
-
- - New configuration variables PUBLIC_EXTERNAL_ARCHIVER and
- PRIVATE_EXTERNAL_ARCHIVER which can contain a shell command
- string for os.popen(). This can be used to invoke an external
- archiver instead of the bundled Pipermail archiver. See
- Defaults.py for details.
-
- - new script `bin/find_member' which can be used to search for a
- member by regular expression.
-
- - More child processes are reaped, which should eliminate most
- occurrences of zombie processes.
-
- - A few small miscellaneous bug fixes (including PR#99, PR#107)
- and improvements to the file locking algorithms.
-
-1.0 (30-Jul-1999)
-
- - Configure script now allows $PREFIX (by default /home/mailman)
- to be permissions 02755. Also, configure now tests for
- vsnprintf()
-
- - Workaround, taken from GNU screen, for systems missing
- vsnprintf()
-
- - Return-Receipt-To: and Disposition-Notification-To: headers are
- always removed from posted messages (they can be used to troll
- for list membership).
-
- - Workaround for MSIE4.01 (and possibly other versions) bug in the
- handling of cookies.
-
- - A small collection of other bug fixes.
-
-1.0rc3 (10-Jul-1999)
-
- - new script bin/check_perms which checks (and optionally fixes)
- the permissions and group ownerships of the files in your
- Mailman installation.
-
- - Removed a bottleneck in the archiving code that was causing
- performance problems on highly loaded servers.
-
- - The code that saves a list's state and configuration database
- has been made more robust.
-
- - Additional exception handlers have been added in several places
- to alleviate problems with Mailman bombing out when it really
- would be better to print/log a helpful message.
-
- - The "password" mail command will now mail back the sender's
- subscription password when given with no arguments.
-
- - The embarrassing subject-prefixing bug present in rc2 has been
- fixed.
-
- - A small (but nice :) collection of other squashed bugs.
-
-1.0rc2 (14-Jun-1999)
-
- - A security flaw in the CGI cookie mechanisms was discovered --
- the Mailman-issued cookies were easily spoofable, implying that
- e.g. admin access to all Mailman lists via the web interface
- could be compromised. This flaw has now been fixed.
-
- - Handling of SMTP errors has been improved.
-
- - Both "Mass Subscription" via web admin interface and
- bin/add_members have been greatly sped up.
-
- - autoconf check for syslog has been revamped, and is now verified
- to work on SCO OpenServer 5. If syslog can't be found, the C
- wrappers will compile, but without any syslog calls.
-
- - Various other bug fixes.
-
-1.0rc1 (04-May-1999)
-
- - There is a new Mailman logo, contributed by The Dragon De
- Monsyne. Please read the INSTALL file for information about
- installing the logo in a place your Web server can find it.
-
- - USE_ENVELOPE_SENDER is now set to 0 by default. Turning this on
- caused problems for too many users; lists restricted to
- member-only posts were not matching the addresses correctly.
-
- - A revamped bin/withlist to be a little more useful.
-
- - A revamped cron/mailpasswds which groups users by virtual hosts.
-
- - The usual assortment of bug fixes.
-
-1.0b11 (03-Apr-1999)
-
- - Bug fixes and improvements for case preservation of subscribed
- addresses. The DATA_FILE_VERSION has been bumped to 14.
-
- - New script bin/withlist, useful for interactive debugging.
-
-1.0b10 (26-Mar-1999)
-
- - New script bin/sync_members which can be used to synchronize a
- list's membership against a flat (e.g. sendmail :include: style)
- file.
-
- - bin/add_members and bin/remove_members now accept addresses on
- the command line with `-' as the value for the -d and -n
- options.
-
- - Added variable USE_ENVELOPE_SENDER to Defaults.py for site-wide
- configuration of address matching scheme. With this variable
- set to true, the envelope sender (e.g. Unix "From_" header) is
- used to match addresses, otherwise the From: header is used.
- Envelope sender matching seems not to work on many systems.
- This variable is currently defaulted to 1, but may change to 0
- for the final release.
-
- - Reorganization of the membership management admin page. Also
- member addresses are linked to their options page. Only the
- `General' category has the admin password change form.
-
- - Major reorganization of email command handling and responses.
- `notmetoo' is the preferred email command instead of `norcv',
- although the latter is still accepted as an argument. If more
- than 5 errors are found in the message, command processing is
- halted.
-
- - User options page now shows the user their case-preserved
- subscribed address as well.
-
- - The usual assortment of bug fixes.
-
-1.0b9 (01-Mar-1999)
-
- - New bin scripts: clone_member, list_members, add_members (a
- consolidation of convertlist and populate_new_list which have
- been removed).
-
- - Two new readmes have been added: README.LINUX and README.QMAIL
-
- - New configure option --with-cgi-ext which can be used if your
- Web server requires extensions on CGI scripts. The extension
- must include a dot (e.g. --with-cgi-ext=".cgi").
-
- - Many bug fixes, including the setgid problem that was causing
- mail to be lost on some versions of Linux.
-
-1.0b8 (14-Jan-1999)
-
- - Bug fixes and workarounds for certain Linuxes.
-
- - Illegal addresses are no longer allowed to be subscribed, from
- any interface.
-
-1.0b7 (31-Dec-1998)
-
- - Many, many bug fixes. Some performance improvements for large
- lists. Some improvements in the Web interfaces. Some security
- improvements. Improved compatibility with Python 1.5.
-
- - bin/convert_list and bin/populate_new_list have been replaced
- by bin/add_members.
-
- - Admins can now get notification on subscriptions and
- unsubscriptions. Posts are now logged.
-
- - The username portion of email addresses are now case-preserved
- for delivery purposes. All other address comparisions are
- case-insensitive.
-
- - New default SMTP_MAX_RCPTS that limits the number of "RCPT TO"
- SMTP commands that can be given for a single message. Most
- MTAs have some hard limit.
-
- - "Precedence: bulk" header and "List-id:" header are now added
- to all outgoing messages. The latter is not added if the
- message already has a "List-id:" header. See RFC 2046 and
- draft-chandhok-listid-02 for details.
-
- - The standard (as of Python 1.5.2) smtplib.py is now used.
-
- - The install process now compiles all the .py files in the
- installation.
-
- - Versions of the Mailman papers given at IPC7 and LISA-98 are
- now included.
-
-1.0b6 (07-Nov-1998)
-
- - Archiving is (finally) back in.
-
- - Administrivia filter added.
-
- - Mail queue mechanism revamped with better concurrency control.
-
- - For recipients that have estmp MTAs, set delivery notification
- status so that only delivery failure notices are sent out,
- inhibiting 4 hour and N day warning notices.
-
- - Now expire old unconfirmed subscription requests, rather than
- keeping them forever.
-
- - Added proposed standard List-Id: header, and our own
- X-MailmanVersion header.
-
- - Prevent havoc from attempts to subscribe a list to itself. (!)
-
- - Refine mail command processing to prevent loops.
-
- - Pending subscription DB redone with better locking and cleaner
- interface.
-
- - posters functionality expanded.
-
- - Subscription policy more flexible, sensible, and
- site-configurable.
-
- - Various and sundry bug fixes.
-
-1.0b5 (27-Jul-1998)
-
- - New file locking that should be portable and work w/ NFS.
-
- - Better use of packages.
-
- - Better error logging and reporting.
-
- - Less startup overhead.
-
- - Various and sundry bug fixes.
-
-
-1.0b4 (03-Jun-1998)
-
- - A configure script for easy installation (Barry Warsaw)
-
- - The ability to install Mailman to locations other than
- /home/mailman (Barry Warsaw)
-
- - Use cookies on the admin pages (also hides admin pages from
- others) (Scott Cotton)
-
- - Subscription requests send a request for confirmation, which may
- be done by simply replying to the message (Scott Cotton)
-
- - Facilities for gating mail to a newsgroup, and for gating a
- newsgroup to a mailing list (John Viega)
-
- - Contact the SMTP port instead of calling sendmail (primarily for
- portability) (John Viega)
-
- - Changed all links on web pages to relative links where appropriate.
- (John Viega)
-
- - Use MD5 if crypt is not available (John Viega)
-
- - Lots of fixing up of bounce handling (Ken Manheimer)
-
- - General UI polishing (Ken Manheimer)
-
- - mm_html: Make it prominent when the user's delivery is disabled
- on his option page. (Ken Manheimer)
-
- - mallist:DeleteMember() Delete the option setings if any. (Ken
- Manheimer)
-
-1.0b3 (03-May-1998)
-
- - mm_message:Deliverer.DeliverToList() added missing newline
- between the headers and message body. Without it, any sequence
- of initial body lines that _looked_ like headers ("Sir: Please
- excuse my impertinence, but") got treated like headers.
-
- - Fixed typo which broke subscription acknowledgement message
- (thanks to janne sinkonen for pointing this out promptly after
- release). (Anyone who applied my intermediate patch will
- probably see this one trigger patch'es reversed-patch
- detector...)
-
- - Fixed cgi-wrapper.c so it doesn't segfault when invoked with
- improper uid or gid, and generally wrappers are cleaned up a
- bit.
-
- - Prevented delivery-failure notices for misdirected subscribe-
- confirmation requests from bouncing back to the -request addr,
- and then being treated as failing requests.
-
- Implemented two measures. Set the reply-to for the
- confirmation- request to the -request addr, and the sender to be
- the list admin. This way, bounces go to list admin instead of
- to -request addr. (Using the errors-to header wasn't
- sufficient. Thanks, barry, for pointing out the use of sender
- here.) Second, ignore any mailcommands coming from postmaster
- or non-login system type accounts (mailer-daemon, daemon,
- postoffice, etc.)
-
- - Reenabled admin setting of web_page_url - crucial for having
- lists use alternate names of a host that occupies multiple
- addresses.
-
- - Fixed and refined admin-options help mechanism. Top-level visit
- to general-category (where the "general" isn't in the URL) was
- broken. New help presentation shows the same row that shows on
- the actual options page.
-
- - cron/crontab.in crontab template had wrong name for senddigests.
-
- - Default digest format setting, as distributed, is now non-MIME,
- on urging of reasoned voices asserting that there are still
- enough bad MIME implementations in the world to be a nuisance to
- too many users if MIME is the default. Sigh.
-
- - MIME digests now preserve the structure of MIME postings,
- keeping attachments as attachments, etc. They also are more
- structured in general.
-
- - Added README instructions explaining how to determine the right
- UID and GID settings for the wrapper executables, and improved
- some of the explanations about exploratory interaction
- w/mailman.
-
- - Removed the constraint that subscribers have their domain
- included in a static list in the code. We might want to
- eventually reincorporate the check for the sake of a warning
- message, to give a heads up to the subscriber, but try delivery
- anyway...
-
- - Added missing titles to error docs.
-
- - Improved several help details, including particularly explaining
- better how real_name setting is used.
-
- - Strengthened admonition against setting reply_goes_to_list.
-
- - Added X-BeenThere header to postings for the sake of prevention
- of external mail loops.
-
- - Improved handling of bounced messages to better recognize
- members address, and prevent duplicate attempts to react (which
- could cause superfluous notices to administrator).
-
- - Added __delitem__ method to mm_message.OutgoingMessage, to fix
- the intermediate patch posted just before this one.
-
- - Using keyword substitution format for more message text (ie,
- "substituting %(such)s into text" % {'such': "something"}) to
- make the substitutions less fragile and, presumably, easier to
- debug.
-
- - Removed hardwired (and failure-prone) /tmp file logging from
- answer.majordomo_mail, and generally spiffed up following janne
- sinkkonen's lead.
-
-1.0b2 (13-Apr-1998)
-1.0b1 (09-Apr-1998)
-
- Web pages much more polished
- - Better organized, text more finely crafted
- - Easier, more refined layout
- - List info and admin interface overviews, enumerate all public lists
- (via, e.g., http://www.python.org/mailman/listinfo - sans the
- specific list)
- - Admin interface broken into sections, with help elaboration for
- complicated configuration options
-
- Mailing List Archives
- - Integrated with a newer, *much* improved, external pipermail - to be
- found at http://starship.skyport.net/crew/amk/maintained/pipermail.html
- - Private archives protected with mailing list members passwords,
- cookie-fied.
-
- Spam prevention
- - New spam prevention measures catch most if not all spam without
- operator intervention or general constraints on who can post to
- list:
- require_explicit_destination option imposes hold of any postings
- that do not have the list name in any of the to or cc header
- destination addresses. This catches the vast majority of random
- spam.
- Other options (forbidden_posters, bounce_matching_headers) provide
- for filtering of known transgressors.
- - Option obscure_addresses (default on) causes mailing list subscriber
- lists on the web to be slightly mangled so they're not directly
- recognizable as email address by web spiders, which might be
- seeking targets for spammers.
-
- Site configuration arrangement organized - in mailman/mailman/modules:
- - When installing, create a mailman/modules/mm_cfg.py (if there's not
- one already there), using mm_cfg.py.dist as a template.
- mm_default.py contains the distributed defaults, including
- descriptions of the values. mm_cfg.py does a 'from mm_defaults.py
- import *' to get the distributed defaults. Include settings in
- mm_cfg.py for any values in mm_defaults.py that need to be
- customized for your site, after the 'from .. import *'.
- See mm_cfg.py.dist for more details.
-
- Logging
- - Major operations (subscription, admin approval, bounce,
- digestification, cgi script failure tracebacks) logged in files
- using a reliable mechanism
- - Wrapper executables log authentication complaints via syslog
-
- Wrappers
- - All cgi-script wrapper executables combined in a single source,
- easier to configure. (Mail and aliases wrappers separate.)
-
- List structure version migration
- - Provision for automatic update of list structures when moving to a
- new version of the system. See modules/versions.py.
-
- Code cleaning
- - Many more module docstrings, __version__ settings, more function
- docstrings.
- - Most unqualified exception catches have been replaced with more
- finely targeted catches, to avoid concealing bugs.
- - Lotsa long lines wrapped (pet peeve:).
-
- Random details (not complete, sorry):
- - make archival frequency a list option
- - Option for daily digest dispatch, in addition to size threshhold
- - make sure users only get one periodic password notifcation message for
- all the lists they're on (repaired 1.0b1.1 varying-case mistake)
- - Fix rmlist sans-argument bug causing deletion of all lists!
- - doubled generated random passwords to four letters
- - Cleaned lots and lots of notices
- - Lots and lots of html page cleanup, including table-of-contents, etc
- - Admin options sections - don't do the "if so" if the ensuing list
- is empty
- - Prevent list subject-prefix cascade
- - Sources under CVS
- - Various spam filters - implicit-destination, header-field
- - Adjusted permissions for group access
- - Prevent redundant subscription from redundant vetted requests
- - Instituted centralize, robustish logging
- - Wrapper sources use syslog for logging (john viega)
- - Sorting of users done on presentation, not in list.
- - Edit options - give an error for non-existent users, not an options page.
- - Bounce handling - offer 'disable' option, instead of remove, and
- never remove without notifying admin
- - Moved subscribers off of listinfo (and made private lists visible
- modulo authentication)
- - Parameterize default digest headers and footers and create some
- - Put titles on cgi result pages that do not get titles (all?)
- - Option for immediate admin notifcation via email of pending
- requests, as well as periodic
- - Admin options web-page help
- - Enabled grouped and cascading lists despite implicit-name constraint
- - Changed subscribers list so it has its own script (roster)
- - Welcome pages: http://www.python.org/mailman/{admin,listinfo}/
-
-0.95 (25-Jan-1997)
- - Fixed a bug in sending out digests added when adding disable mime option.
- - Added an option to not notify about bounced posts.
- - Added hook for pre-posting filters. These could be used to
- auto-strip signatures. I'm using the feature to auto-strip footers
- that are auto-generated by mail received from another mailing list.
-
-0.94 (22-Jan-1997)
- - Made admin password work ubiquitously in place of a user password.
- - Added an interface for getting / setting user options.
- - Added user option to disable mime digests (digested people only)
- - Added user option to not receive your own posts (nondigested people only)
- - Added user option to ack posts
- - Added user option to disable list delivery to their box.
- - Added web interface to user options
- - Config number of sendmail spawns on a per-list basis
- - Fixed extra space at beginning of each message in digests...
- - Handled comma separated emails in bounce messages...
- - Added a FindUser() function to MailList. Used it where appropriate.
- - Added mail interface to setting list options.
- - Added name links to the templates options page
- - Added an option so people can hide their names from the subscription list.
- - Added an answer_majordomo_mail script for people switching...
-
-0.93 (18/20-Jan-1997)
- - When delivering to list, don't call sendmail directly. Write to a file,
- and then run the new deliver script, which forks and exits in the parent
- immediately to avoid hanging when delivering mail for large lists, so that
- large lists don't spend a lot of time locked.
- - GetSender() no longer assumes that you don't have an owner-xxx address.
- - Fixed unsubscribing via mail.
- - Made subscribe via mail generate a password if you don't supply one.
- - Added an option to clobber the date in the archives to the date the list
- resent the post, so that the archive doesn't get mail from people sending
- bad dates clumped up at the beginning or end.
- - Added automatic error message processing as an option. Currently
- logging to /tmp/bounce.log
- - Changed archive to take a list as an argument, (the old way was broken)
- - Remove (ignore) spaces in email addresses
- - Allow user passwords to be case insensitive.
- - Removed the cleanup script since it was now redundant.
- - Fixed archives if there were no archives.
- - Added a Lock() call to Load() and Create(). This fixes the
- problem of loading then locking.
- - Removed all occurances of Lock() except for the ones in mailing
- list since creating a list
- now implicitly locks it.
- - Quote single periods in message text.
- - Made bounce system handle digest users fairly.
-
-0.92 (13/16-Jan-1997)
- - Added Lock and Unlock methods to list to ensure each operation is atomic
- - Added a cmd that rms all files of a mailing list (but not the aliases)
- - Fixed subscribing an unknown user@localhost (confirm this)
- - Changed the sender to list-admin@... to ensure we avoid mail loops.
- - check to make sure there are msgs to archive before calling pipermail.
- - started using this w/ real mailing lists.
- - Added a cron script that scours the maillog for User/Host unknown errs
- - Sort membership lists
- - Always display digest_is_default option
- - Don't slam the TO list unless you're sending a digest.
- - When making digest summaries, if missing sender name, use their email.
- - Hacked in some protection against crappy dates in pipermail.py
- - Made it so archive/digest volumes can go up monthly for large large lists.
- - Number digest messages
- - Add headers/footers to each message in digest for braindead mailers
- - I removed some forgotten debug statements that caused server errors
- when a CGI script sent mail.
- - Removed loose_matches flag, since everything used it.
- - Fixed a problem in pipermail if there was no From line.
- - In upvolume_ scripts, remove INDEX files as we leave a volume.
- - Threw a couple of scripts in bin for generating archives from majordomo's
- digest-archives. I wouldn't recommend them for the layman, though, they
- were meant to do a job quickly, not to be usable.
-
-0.91 (23-Dec-1996)
- - broke code into mixins for managability
- - tag parsing instead of lots of gsubs
- - tweaked pipermail (see comments on pipermail header)
- - templates are now on a per-list basis as intended.
- - request over web that your password be emailed to you.
- - option so that web subscriptions require email confirmation.
- - wrote a first pass at an admin interface to configurable variables.
- - made digests mime-compliant.
- - added a FakeFile class that simulates enough of a file object on a
- string of text to fool rfc822.Message in non-seek mode.
- - changed OutgoingMessage not to require its args in constructor.
- - added an admin request DB interface.
- - clearly separated the internal name from the real name.
- - replaced lots of ugly, redundant code w/ nice code.
- (added Get...Email() interfaces, GetScriptURL, etc...)
- - Wrote a lot of pretty html formatting functions / classes.
- - Fleshed out the newlist command a lot. It now mails the new list
- admin, and auto-updates the aliases file.
- - Made multiple owners acceptable.
- - Non-advertised lists, closed lists, max header length, max msg length
- - Allowed editing templates from list admin pages.
- - You can get to your info page from the web even if the list is closed.
-
-
-Local Variables:
-mode: indented-text
-indent-tabs-mode: nil
-End:
diff --git a/docs/STYLEGUIDE.txt b/docs/STYLEGUIDE.txt
deleted file mode 100644
index d4a7bc527..000000000
--- a/docs/STYLEGUIDE.txt
+++ /dev/null
@@ -1,151 +0,0 @@
-Python coding style guide for Mailman
-Copyright (C) 2002-2009 Barry A. Warsaw
-
-NOTE: The canonical version of this style guide can be found at:
-
- http://barry.warsaw.us/software/STYLEGUIDE.txt
-
-This document contains a style guide for Python programming, as used in
-Mailman. In general, Guido van Rossum's style guide should be taken as a
-basis, as embodied in PEP 8:
-
- http://www.python.org/peps/pep-0008.html
-
-however, my (Barry Warsaw's) personal preferences differ from Guido's in a few
-places. "When in Rome..." should apply meaning, when coding stuff for Python,
-Guido's style should rule, however when coding for Mailman, I'd like to see my
-preferences used instead.
-
-Remember rule #1, A Foolish Consistency is the Hobgoblin of Little Minds.
-That said, here's a quick outline of where my preferences depart from PEP 8.
-
-- After file comments (e.g. license block), add a __metaclass__ definition so
- that (in Python 2.x) all classes will be new-style. Following that, add an
- __all__ section that names, one-per-line, all the public names exported by
- this module.
-
-- Imports are always put at the top of the file, just after any module
- comments and docstrings, and before module globals and constants, but after
- any __future__ imports, or __metaclass__ and __all__ definitions.
-
- Imports should be grouped, with the order being:
-
- 1. standard library imports
- 2. related major package imports (e.g. all email package imports next)
- 3. application specific imports
-
- From-imports should follow non-from imports. Dotted imports should follow
- non-dotted imports. Non-dotted imports should be grouped by increasing
- length, while dotted imports should be grouped alphabetically.
-
-- In general, there should be at most one class per module, if the module
- contains class definitions. If it's a module of functions, that's fine,
- group them as common sense dictates. A class-containing module can also
- contain some helper functions, but it's best to keep these non-public by not
- including them in the __all__ section.
-
- Give the class and the module the same name, differing only by case as PEP 8
- recommends. E.g.
-
- from mailman.parser import Parser
-
-- When importing a class from a class-containing module, it's usually
- okay to spell this
-
- from myclass import MyClass
- from foo.bar.yourclass import YourClass
-
- If this spelling causes name clashes, then spell them
-
- import myclass
- import foo.bar.yourclass
-
- and use "myclass.MyClass"
-
- You can also use 'import...as' to rename a clashing symbol.
-
-- Right hanging comments are discouraged, in favor of preceding comments.
- E.g. bad:
-
- foo = blarzigop(bar) # if you don't blarzigop it, it'll shlorp
-
- Good:
-
- # If you don't blarzigop it, it'll shlorp.
- foo = blarzigop(bar)
-
- Comments should always be complete sentences, with proper capitalization and
- full stops at the end.
-
-- Major sections of code in a module should be separated by line feed
- characters (e.g. ^L -- that's a single character control-L not two
- characters). This helps with Emacs navigation.
-
- Always put a ^L before module-level functions, before class definitions,
- before big blocks of constants which follow imports, and any place else that
- would be convenient to jump to. Always put two blank lines before a ^L.
-
-- Put two blank lines between any top level construct or block of code
- (e.g. after import blocks). Put only one blank line between methods in a
- class. No blank lines between the class definition and the first method in
- the class. No blank lines between a class/method and its docstrings.
-
-- Try to minimize the vertical whitespace in a class. If you're inclined to
- separate stanzas of code for readability, consider putting a comment in
- describing what the next stanza's purpose is. Don't put stupid or obvious
- comments in just to avoid vertical whitespace though.
-
-- Unless internal quote characters would mess things up, the general rule is
- that single quotes should be used for short strings, double quotes for
- triple-quoted multi-line strings and docstrings. E.g.
-
- foo = 'a foo thing'
- warn = "Don't mess things up"
- notice = """Our three chief weapons are:
- - surprise
- - deception
- - an almost fanatical devotion to the pope
- """
-
-- Write docstrings for modules, functions, classes, and methods. Docstrings
- can be omitted for special methods (e.g. __init__() or __str__()) where the
- meaning is obvious.
-
-- PEP 257 describes good docstrings conventions. Note that most importantly,
- the """ that ends a multiline docstring should be on a line by itself, e.g.:
-
- """Return a foobang
-
- Optional plotz says to frobnicate the bizbaz first.
- """
-
-- For one liner docstrings, keep the closing """ on the same line.
-
-- <> is strongly preferred over != (Sadly, Python is making this harder to
- follow and it cannot be followed for Python 3).
-
-- fill-column for docstrings should be 78.
-
-- When testing the emptiness of sequences, use "if len(seq) == 0" instead of
- relying on the falseness of empty sequences. However, if a variable can be
- one of several false values, it's okay to just use "if seq", though a
- preceding comment is usually in order.
-
-- Always decide whether a class's methods and instance variables should be
- public or non-public.
-
- Single leading underscores are generally preferred for non-public
- attributes. Use double leading underscores only in classes designed for
- inheritance to ensure that truly private attributes will never name clash.
-
- Public attributes should have no leading or trailing underscores unless they
- conflict with reserved words, in which case, a single trailing underscore is
- preferable to a leading one, or a corrupted spelling, e.g. class_ rather
- than klass.
-
-
-
-Local Variables:
-mode: indented-text
-indent-tabs-mode: nil
-End:
diff --git a/docs/gnu-COPYING-GPL b/docs/gnu-COPYING-GPL
deleted file mode 100644
index 3912109b5..000000000
--- a/docs/gnu-COPYING-GPL
+++ /dev/null
@@ -1,340 +0,0 @@
- GNU GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
- 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users. This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it. (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.) You can apply it to
-your programs, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
- For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have. You must make sure that they, too, receive or can get the
-source code. And you must show them these terms so they know their
-rights.
-
- We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
- Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software. If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary. To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
- The precise terms and conditions for copying, distribution and
-modification follow.
-
- GNU GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License. The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language. (Hereinafter, translation is included without limitation in
-the term "modification".) Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
- 1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
- 2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) You must cause the modified files to carry prominent notices
- stating that you changed the files and the date of any change.
-
- b) You must cause any work that you distribute or publish, that in
- whole or in part contains or is derived from the Program or any
- part thereof, to be licensed as a whole at no charge to all third
- parties under the terms of this License.
-
- c) If the modified program normally reads commands interactively
- when run, you must cause it, when started running for such
- interactive use in the most ordinary way, to print or display an
- announcement including an appropriate copyright notice and a
- notice that there is no warranty (or else, saying that you provide
- a warranty) and that users may redistribute the program under
- these conditions, and telling the user how to view a copy of this
- License. (Exception: if the Program itself is interactive but
- does not normally print such an announcement, your work based on
- the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
- a) Accompany it with the complete corresponding machine-readable
- source code, which must be distributed under the terms of Sections
- 1 and 2 above on a medium customarily used for software interchange; or,
-
- b) Accompany it with a written offer, valid for at least three
- years, to give any third party, for a charge no more than your
- cost of physically performing source distribution, a complete
- machine-readable copy of the corresponding source code, to be
- distributed under the terms of Sections 1 and 2 above on a medium
- customarily used for software interchange; or,
-
- c) Accompany it with the information you received as to the offer
- to distribute corresponding source code. (This alternative is
- allowed only for noncommercial distribution and only if you
- received the program in object code or executable form with such
- an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it. For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable. However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License. Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
- 5. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Program or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
- 6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
- 7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all. For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded. In such case, this License incorporates
-the limitation as if written in the body of this License.
-
- 9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time. Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation. If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
- 10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission. For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this. Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
- NO WARRANTY
-
- 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
- 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
- END OF TERMS AND CONDITIONS
-
- How to Apply These Terms to Your New Programs
-
- If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
- To do so, attach the following notices to the program. It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
- <one line to give the program's name and a brief idea of what it does.>
- Copyright (C) <year> <name of author>
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- 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 St, Fifth Floor, Boston, MA 02110-1301 USA
-
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
- Gnomovision version 69, Copyright (C) year name of author
- Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
- This is free software, and you are welcome to redistribute it
- under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License. Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary. Here is a sample; alter the names:
-
- Yoyodyne, Inc., hereby disclaims all copyright interest in the program
- `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
- <signature of Ty Coon>, 1 April 1989
- Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs. If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library. If this is what you want to do, use the GNU Library General
-Public License instead of this License.
diff --git a/docs/man/add_members.1 b/docs/man/add_members.1
deleted file mode 100644
index d442a2b66..000000000
--- a/docs/man/add_members.1
+++ /dev/null
@@ -1,60 +0,0 @@
-.\"
-.\" GNU Mailman Manual
-.\"
-.\" add_members
-.\"
-.\" Documenter: Terri Oda
-.\" terri (at) zone12.com
-.\" Created: September 12, 2004
-.\" Last Updated: September 12, 2004
-.\"
-.TH add_members 1 "September 12, 2004" "Mailman 2.1" "GNU Mailman Manual"
-.\"=====================================================================
-.SH NAME
-add_members \- Remove members from a Mailman mailing list.
-.\"=====================================================================
-.SH SYNOPSIS
-.B add_members
-[-r \fIfile\fP]
-[-d \fIfile\fP]
-[-w <\fIy|n\fP>]
-[-a <\fIy|n\fP>]
-[-h]
-\fIlistname\fP
-.\"=====================================================================
-.SH DESCRIPTION
-.B add_members
-adds members to a Mailman mailing list from the command line.
-.PP
-You must supply at least one of -r and -d options. At most one of the
-files can be `-'.
-.\"=====================================================================
-.SH OPTIONS
-.IP "--regular-members-file=\fIfile\fP, -r \fIfile\fP"
-A file containing addresses of the members to be added, one
-address per line. This list of people become non-digest
-members. If file is `-', read addresses from stdin. Note that
--n/--non-digest-members-file are deprecated synonyms for this option.
-.IP "--digest-members-file=\fIfile\fP, -d \fIfile\fP"
-Similar to above, but these people become digest members.
-.IP "--welome-msg=<\fIy|n\fP>, -w <\fIy|n\fP>"
-Set whether or not to send the list members a welcome message,
-overriding whatever the list's `send_welcome_msg' setting is.
-.IP "--admin-notify=<\fIy|n\fP>, -a <\fIy|n\fP>"
-Set whether or not to send the list administrators a notification on
-the success/failure of these subscriptions, overriding whatever the
-list's `admin_notify_mchanges' setting is.
-.IP \fIlistname\fP
-The name of the list to which you wish to add members.
-.\"=====================================================================
-.SH SEE ALSO
-.BR clone_member (1),
-.BR find_member (1),
-.BR list_members (1),
-.BR remove_members (1)
-.PP
-The Mailman website: http://www.list.org
-.\"=====================================================================
-.SH AUTHOR
-This man page was created by Terri Oda <terri (at) zone12.com>.
-Use <mailman-developers@python.org> to contact the developers.
diff --git a/docs/man/check_db.1 b/docs/man/check_db.1
deleted file mode 100644
index 28a3b8149..000000000
--- a/docs/man/check_db.1
+++ /dev/null
@@ -1,60 +0,0 @@
-.\"
-.\" GNU Mailman Manual
-.\"
-.\" check_db
-.\"
-.\" Documenter: Terri Oda
-.\" terri (at) zone12.com
-.\" Created: September 14, 2004
-.\" Last Updated: September 14, 2004
-.\"
-.TH check_db 1 "September 14, 2004" "Mailman 2.1" "GNU Mailman Manual"
-.\"=====================================================================
-.SH NAME
-check_db \- Check a Mailman mailing list's config database file for integrity.
-.\"=====================================================================
-.SH SYNOPSIS
-.B check_db
-[-a]
-[-v]
-[-h]
-[\fIlistname\fP [\fIlistname\fP ...]]
-.\"=====================================================================
-.SH DESCRIPTION
-.B check_db
-checks a list's config database file for integrity.
-.PP
-All of the following files are checked:
-.RS
- config.pck
- config.pck.last
- config.db
- config.db.last
- config.safety
-.RE
-.PP
-It's okay if any of these are missing. config.pck and config.pck.last are
-pickled versions of the config database file for 2.1a3 and beyond. config.db
-and config.db.last are used in all earlier versions, and these are Python
-marshals. config.safety is a pickle written by 2.1a3 and beyond when the
-primary config.pck file could not be read.
-.\"=====================================================================
-.SH OPTIONS
-.IP "--all, -a"
-Check the databases for all lists. Otherwise only the lists named on
-the command line are checked.
-.IP "--verbose, -v"
-Verbose output. The state of every tested file is printed.
-Otherwise only corrupt files are displayed.
-.IP "--help, -h"
-Print help text and exit.
-.\"=====================================================================
-.SH SEE ALSO
-.BR check_perms (1),
-.BR transcheck (1)
-.PP
-The Mailman website: http://www.list.org
-.\"=====================================================================
-.SH AUTHOR
-This man page was created by Terri Oda <terri (at) zone12.com>.
-Use <mailman-developers@python.org> to contact the developers.
diff --git a/docs/man/check_perms.1 b/docs/man/check_perms.1
deleted file mode 100644
index 76966a87c..000000000
--- a/docs/man/check_perms.1
+++ /dev/null
@@ -1,46 +0,0 @@
-.\"
-.\" GNU Mailman Manual
-.\"
-.\" check_perms
-.\"
-.\" Documenter: Terri Oda
-.\" terri (at) zone12.com
-.\" Created: September 14, 2004
-.\" Last Updated: September 14, 2004
-.\"
-.TH check_perms 1 "September 14, 2004" "Mailman 2.1" "GNU Mailman Manual"
-.\"=====================================================================
-.SH NAME
-check_perms \- Check the permissions for the Mailman installation.
-.\"=====================================================================
-.SH SYNOPSIS
-.B check_perms
-[-f]
-[-v]
-[-h]
-.\"=====================================================================
-.SH DESCRIPTION
-.B check_perms
-checks the permissions for the Mailman installation.
-.PP
-With no arguments, just check and report all the files that have bogus
-permissions or group ownership. With -f (and run as root), fix all the
-permission problems found. With -v be verbose.
-.\"=====================================================================
-.SH OPTIONS
-.IP "-f"
-Run as root and fix all the permission problems found.
-.IP "-v"
-Verbose output.
-.IP "--help, -h"
-Print help message and exit.
-.\"=====================================================================
-.SH SEE ALSO
-.BR check_db (1),
-.BR transcheck (1)
-.PP
-The Mailman website: http://www.list.org
-.\"=====================================================================
-.SH AUTHOR
-This man page was created by Terri Oda <terri (at) zone12.com>.
-Use <mailman-developers@python.org> to contact the developers.
diff --git a/docs/man/clone_member.1 b/docs/man/clone_member.1
deleted file mode 100644
index 35148f6af..000000000
--- a/docs/man/clone_member.1
+++ /dev/null
@@ -1,71 +0,0 @@
-.\"
-.\" GNU Mailman Manual
-.\"
-.\" clone_member
-.\"
-.\" Documenter: Terri Oda
-.\" terri (at) zone12.com
-.\" Created: September 14, 2004
-.\" Last Updated: September 14, 2004
-.\"
-.TH clone_member 1 "September 14, 2004" "Mailman 2.1" "GNU Mailman Manual"
-.\"=====================================================================
-.SH NAME
-clone_member \- Clone a Mailman mailing list member address.
-.\"=====================================================================
-.SH SYNOPSIS
-.B clone_member
-[-l \fIlistname\fP]
-[-r]
-[-a]
-[-q]
-[-n]
-[-h]
-\fIfromoldaddr\fP \fItonewaddr\fP
-.\"=====================================================================
-.SH DESCRIPTION
-.B clone_member
-clones a member address.
-.PP
-Cloning a member address means that a new member will be added who has all the
-same options and passwords as the original member address. Note that this
-operation is fairly trusting of the user who runs it -- it does no
-verification to the new address, it does not send out a welcome message, etc.
-.PP
-The existing member's subscription is usually not modified in any way. If you
-want to remove the old address, use the -r flag. If you also want to change
-any list admin addresses, use the -a flag.
-.\"=====================================================================
-.SH OPTIONS
-.IP "--listname=\fIlistname\fP, -l \fIlistname\fP"
-Check and modify only the named mailing lists. If -l is not given,
-then all mailing lists are scanned from the address. Multiple -l
-options can be supplied.
-.IP "--remove, -r"
-Remove the old address from the mailing list after it's been cloned.
-.IP "--admin, -a"
-Scan the list admin addresses for the old address, and clone or change
-them too.
-.IP "--quiet, -q"
-Do the modifications quietly.
-.IP "--nomodify, -n"
-Print what would be done, but don't actually do it. Inhibits the
---quiet flag.
-.IP "--help, -h"
-Print help message and exit.
-.IP \fIfromoldaddr\fP
-(`from old address') is the old address of the user.
-.IP \fItonewaddr\fP
-(`to new address') is the new address of the user.
-.\"=====================================================================
-.SH SEE ALSO
-.BR add_member (1),
-.BR find_member (1),
-.BR list_members (1),
-.BR remove_members (1)
-.PP
-The Mailman website: http://www.list.org
-.\"=====================================================================
-.SH AUTHOR
-This man page was created by Terri Oda <terri (at) zone12.com>.
-Use <mailman-developers@python.org> to contact the developers.
diff --git a/docs/man/find_member.1 b/docs/man/find_member.1
deleted file mode 100644
index 9d76bf5db..000000000
--- a/docs/man/find_member.1
+++ /dev/null
@@ -1,64 +0,0 @@
-add.\"
-.\" GNU Mailman Manual
-.\"
-.\" find_member
-.\"
-.\" Documenter: Terri Oda
-.\" terri (at) zone12.com
-.\" Created: September 13, 2004
-.\" Last Updated: September 13, 2004
-.\"
-.TH find_member 1 "September 13, 2004" "Mailman 2.1" "GNU Mailman Manual"
-.\"=====================================================================
-.SH NAME
-find_member \- Find all Mailman mailing lists to which a given address is
-subscribed.
-.\"=====================================================================
-.SH SYNOPSIS
-.B find_member
-[-l \fIlistname\fP]
-[-x \fIlistname\fP]
-[-w]
-[-h]
-\fIregex\fP
-.\"=====================================================================
-.SH DESCRIPTION
-.B find_member
-finds all Mailman mailing lists to which a member's address is subscribed.
-.PP
-The interaction between -l and -x is as follows. If any -l option is given
-then only the named list will be included in the search. If any -x option is
-given but no -l option is given, then all lists will be search except those
-specifically excluded.
-.PP
-Regular expression syntax is Perl5-like, using the Python re module. Complete
-specifications are at:
-.PP
-http://www.python.org/doc/current/lib/module-re.html
-.PP
-Address matches are case-insensitive, but case-preserved addresses are
-displayed.
-.\"=====================================================================
-.SH OPTIONS
-.IP "--listname=\fIlistname\fP, -l \fIlistname\fP"
-Include only the named list in the search.
-.IP "--exclude=\fIlistname\fP, -x \fIlistname\fP"
-Exclude the named list from the search.
-.IP "--owners, -w"
-Search list owners as well as members.
-.IP "--help, -h"
-Print help message and exit.
-.IP \fIregex\fP
-A Python regular expression to match.
-.\"=====================================================================
-.SH SEE ALSO
-.BR add_members (1),
-.BR clone_member (1),
-.BR list_members (1),
-.BR remove_members (1)
-.PP
-The Mailman website: http://www.list.org
-.\"=====================================================================
-.SH AUTHOR
-This man page was created by Terri Oda <terri (at) zone12.com>.
-Use <mailman-developers@python.org> to contact the developers.
diff --git a/docs/man/list_members.1 b/docs/man/list_members.1
deleted file mode 100644
index cbf338a40..000000000
--- a/docs/man/list_members.1
+++ /dev/null
@@ -1,78 +0,0 @@
-add.\"
-.\" GNU Mailman Manual
-.\"
-.\" list_members
-.\"
-.\" Documenter: Terri Oda
-.\" terri (at) zone12.com
-.\" Created: September 13, 2004
-.\" Last Updated: September 13, 2004
-.\"
-.TH list_member 1 "September 13, 2004" "Mailman 2.1" "GNU Mailman Manual"
-.\"=====================================================================
-.SH NAME
-list_member \- List all the members of a Mailman mailing list.
-.\"=====================================================================
-.SH SYNOPSIS
-.B list_member
-[-o \fIfile\fP]
-[-r]
-[-d [\fIkind\fP]]
-[-n [\fIwhy\fI]]
-[-f]
-[-p]
-[-i]
-[-u]
-[-h]
-\fIlistname\fP
-.\"=====================================================================
-.SH DESCRIPTION
-.B list_member
-lists all members of a mailing list.
-.PP
-Note that if neither -r or -d is supplied, both regular members are printed
-first, followed by digest members, but no indication is given as to address
-status.
-.\"=====================================================================
-.SH OPTIONS
-.IP "--output \fIfile\fP, -o \fIfile\fP"
-Write output to specified file instead of standard out.
-.IP "--regular, -r"
-Print just the regular (non-digest) members.
-.IP "--digest[=\fIkind\fP], -d [\fIkind\fP]"
-Print just the digest members. Optional argument can be "mime" or
-"plain" which prints just the digest members receiving that kind of
-digest.
-.IP "--nomail[=\fIwhy\fP], -n[\fIwhy\fP]"
-Print the members that have delivery disabled. Optional argument can
-be "byadmin", "byuser", "bybounce", or "unknown" which prints just the
-users who have delivery disabled for that reason. It can also be
-"enabled" which prints just those member for whom delivery is
-enabled.
-.IP "--fullnames, -f"
-Include the full names in the output.
-.IP "--preserve, -p"
-Output member addresses case preserved the way they were added to the
-list. Otherwise, addresses are printed in all lowercase.
-.IP "--invalid, -i"
-Print only the addresses in the membership list that are invalid.
-Ignores -r, -d, -n.
-.IP "--unicode, -u"
-Print addresses which are stored as Unicode objects instead of normal
-string objects. Ignores -r, -d, -n.
-.IP "--help, -h"
-Print help message and exit.
-.IP "\fIlistname\fP"
-The name of the mailing list to use.
-.\"=====================================================================
-.SH SEE ALSO
-.BR add_members (1),
-.BR clone_member (1),
-.BR find_member (1),
-.BR remove_members (1)
-.PP
-The Mailman website: http://www.list.org
-.\"=====================================================================
-.SH AUTHOR
-This man page was created by Terri Oda <terri (at) zone12.com>.
-Use <mailman-developers@python.org> to contact the developers.
diff --git a/docs/man/remove_members.1 b/docs/man/remove_members.1
deleted file mode 100644
index 69ed545d6..000000000
--- a/docs/man/remove_members.1
+++ /dev/null
@@ -1,63 +0,0 @@
-add.\"
-.\" GNU Mailman Manual
-.\"
-.\" remove_members
-.\"
-.\" Documenter: Terri Oda
-.\" terri (at) zone12.com
-.\" Created: September 13, 2004
-.\" Last Updated: September 13, 2004
-.\"
-.TH remove_members 1 "September 13, 2004" "Mailman 2.1" "GNU Mailman Manual"
-.\"=====================================================================
-.SH NAME
-remove_members \- Remove members from a Mailman mailing list.
-.\"=====================================================================
-.SH SYNOPSIS
-.B remove_members
-[-f \fIfile\fP]
-[-a]
-[--fromall]
-[-n]
-[-N]
-[-h]
-[\fIlistname\fP]
-[\fIaddr1\fP ...]
-.\"=====================================================================
-.SH DESCRIPTION
-.B remove_members
-removes members from a Mailman mailing list from the command line.
-.\"=====================================================================
-.SH OPTIONS
-.IP "---file=\fIfile\fP, -f \fIfile\fP"
-Remove member addresses found in the given file. If file is
-`-', read stdin.
-.IP "--all, -a"
-Remove all members of the mailing list.
-(mutually exclusive with --fromall)
-.IP "--fromall"
-Removes the given addresses from all the lists on this system
-regardless of virtual domains if you have any. This option cannot be
-used -a/--all. Also, you should not specify a listname when
-using this option.
-.IP "--nouserack, -n"
-Don't send the admin acknowledgements. If not specified, the list
-default value is used.
-.IP "--help, -h"
-Print help message and exit.
-.IP \fPlistname\fI
-The name of the mailing list to use.
-.IP \fPaddr1\fI ...
-Additional addresses to remove.
-.\"=====================================================================
-.SH SEE ALSO
-.BR add_members (1),
-.BR clone_member (1),
-.BR find_member (1),
-.BR list_members (1)
-.PP
-The Mailman website: http://www.list.org
-.\"=====================================================================
-.SH AUTHOR
-This man page was created by Terri Oda <terri (at) zone12.com>.
-Use <mailman-developers@python.org> to contact the developers.
diff --git a/docs/man/sync_members.1 b/docs/man/sync_members.1
deleted file mode 100644
index b185ae3c1..000000000
--- a/docs/man/sync_members.1
+++ /dev/null
@@ -1,81 +0,0 @@
-add.\"
-.\" GNU Mailman Manual
-.\"
-.\" list_members
-.\"
-.\" Documenter: Terri Oda
-.\" terri (at) zone12.com
-.\" Created: September 13, 2004
-.\" Last Updated: September 13, 2004
-.\"
-.TH sync_members 1 "September 13, 2004" "Mailman 2.1" "GNU Mailman Manual"
-.\"=====================================================================
-.SH NAME
-sync_members \- Synchronize a Mailman mailing list's membership with a flat file.
-.\"=====================================================================
-.SH SYNOPSIS
-.B sync_members
-[-n]
-[-w <\fIyes|no\fP>]
-[-g <\fIyes|no\fP>]
-[-d <\fIyes|no\fP>]
-[-a <\fIyes|no\fP>]
-[-h]
--f \fIfilename\fP
-\fIlistname\fP
-.\"=====================================================================
-.SH DESCRIPTION
-.B sync_members
-synchronizes a Mailman mailing list's membership with a flat file.
-.PP
-This script is useful if you have a Mailman mailing list and a sendmail
-:include: style list of addresses (also as is used in Majordomo). For every
-address in the file that does not appear in the mailing list, the address is
-added. For every address in the mailing list that does not appear in the
-file, the address is removed. Other options control what happens when an
-address is added or removed.
-.\"=====================================================================
-.SH OPTIONS
-.IP "--no-change -n"
-Don't actually make the changes. Instead, print out what would be
-done to the list.
-.IP "-welcome-msg[=<\fIyes|no\fP>], -w[=<\fIyes|no\fP>]"
-Sets whether or not to send the newly added members a welcome
-message, overriding whatever the list's `send_welcome_msg' setting
-is. With -w=yes or -w, the welcome message is sent. With -w=no, no
-message is sent.
-.IP "--goodbye-msg[=<\fIyes|no\fP>], -g[=<\fIyes|no\fP>]"
-Sets whether or not to send the goodbye message to removed members,
-overriding whatever the list's `send_goodbye_msg' setting is. With
--g=yes or -g, the goodbye message is sent. With -g=no, no message is
-sent.
-.IP "--digest[=<\fIyes|no\fP>], -d[=<\fIyes|no\fP>]"
-Selects whether to make newly added members receive messages in
-digests. With -d=yes or -d, they become digest members. With -d=no
-(or if no -d option given) they are added as regular members.
-.IP "--notifyadmin[=<\fIyes|no\fP>], -a[=<\fIyes|no\fP>]"
-Specifies whether the admin should be notified for each subscription
-or unsubscription. If you're adding a lot of addresses, you
-definitely want to turn this off! With -a=yes or -a, the admin is
-notified. With -a=no, the admin is not notified. With no -a option,
-the default for the list is used.
-.IP "--file <\fIfilename | -\fp>, -f <\fIfilename | -\fP>"
-This option is required. It specifies the flat file to synchronize
-against. Email addresses must appear one per line. If filename is
-`-' then stdin is used.
-.IP "--help, -h"
-Print help message.
-.IP \fIlistname\fP
-Required. This specifies the list to synchronize.
-.\"=====================================================================
-.SH SEE ALSO
-.BR add_members (1),
-.BR clone_member (1),
-.BR list_members (1),
-.BR remove_members (1)
-.PP
-The Mailman website: http://www.list.org
-.\"=====================================================================
-.SH AUTHOR
-This man page was created by Terri Oda <terri (at) zone12.com>.
-Use <mailman-developers@python.org> to contact the developers.
diff --git a/docs/man/transcheck.1 b/docs/man/transcheck.1
deleted file mode 100644
index 6e16a10f8..000000000
--- a/docs/man/transcheck.1
+++ /dev/null
@@ -1,41 +0,0 @@
-.\"
-.\" GNU Mailman Manual
-.\"
-.\" transcheck
-.\"
-.\" Documenter: Terri Oda
-.\" terri (at) zone12.com
-.\" Created: September 18, 2004
-.\" Last Updated: September 18, 2004
-.\"
-.TH transcheck 1 "September 18, 2004" "Mailman 2.1" "GNU Mailman Manual"
-.\"=====================================================================
-.SH NAME
-transcheck \- Check a given Mailman translation
-.\"=====================================================================
-.SH SYNOPSIS
-.B transcheck
-[-q]
-\fIlang\fP
-.\"=====================================================================
-.SH DESCRIPTION
-.B transcheck
-checks a given Mailman translation, making sure that variables and
-tags referenced in translation are the same variables and tags in
-the original templates and catalog.
-.\"=====================================================================
-.SH OPTIONS
-.IP "-q"
-Asks for a brief summary.
-.IP "\fIlang\fP"
-Your country code. (e.g. 'it' for Italy)
-.\"=====================================================================
-.SH SEE ALSO
-.BR check_perms (1),
-.BR check_db (1)
-.PP
-The Mailman website: http://www.list.org
-.\"=====================================================================
-.SH AUTHOR
-This man page was created by Terri Oda <terri (at) zone12.com>.
-Use <mailman-developers@python.org> to contact the developers.
diff --git a/docs/posting-flow-chart.ps b/docs/posting-flow-chart.ps
deleted file mode 100644
index e8d47e27c..000000000
--- a/docs/posting-flow-chart.ps
+++ /dev/null
@@ -1,735 +0,0 @@
-%!PS-Adobe-2.0
-%%Title: posting-flow-chart
-%%Creator: Dia v0.86
-%%CreationDate: Mon Oct 15 13:46:55 2001
-%%For: a user
-%%DocumentPaperSizes: A4
-%%Orientation: Landscape
-%%BeginSetup
-%%EndSetup
-%%EndComments
-%%BeginProlog
-[ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quoteright
-/parenleft /parenright /asterisk /plus /comma /hyphen /period /slash /zero /one
-/two /three /four /five /six /seven /eight /nine /colon /semicolon
-/less /equal /greater /question /at /A /B /C /D /E
-/F /G /H /I /J /K /L /M /N /O
-/P /Q /R /S /T /U /V /W /X /Y
-/Z /bracketleft /backslash /bracketright /asciicircum /underscore /quoteleft /a /b /c
-/d /e /f /g /h /i /j /k /l /m
-/n /o /p /q /r /s /t /u /v /w
-/x /y /z /braceleft /bar /braceright /asciitilde /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/space /exclamdown /cent /sterling /currency /yen /brokenbar /section /dieresis /copyright
-/ordfeminine /guillemotleft /logicalnot /hyphen /registered /macron /degree /plusminus /twosuperior /threesuperior
-/acute /mu /paragraph /periodcentered /cedilla /onesuperior /ordmasculine /guillemotright /onequarter /onehalf
-/threequarters /questiondown /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla
-/Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex /Idieresis /Eth /Ntilde
-/Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply /Oslash /Ugrave /Uacute /Ucircumflex
-/Udieresis /Yacute /Thorn /germandbls /agrave /aacute /acircumflex /atilde /adieresis /aring
-/ae /ccedilla /egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis
-/eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /divide /oslash /ugrave
-/uacute /ucircumflex /udieresis /yacute /thorn /ydieresis] /isolatin1encoding exch def
-/Times-Roman-latin1
- /Times-Roman findfont
- dup length dict begin
- {1 index /FID ne {def} {pop pop} ifelse} forall
- /Encoding isolatin1encoding def
- currentdict end
-definefont pop
-/Times-Italic-latin1
- /Times-Italic findfont
- dup length dict begin
- {1 index /FID ne {def} {pop pop} ifelse} forall
- /Encoding isolatin1encoding def
- currentdict end
-definefont pop
-/Times-Bold-latin1
- /Times-Bold findfont
- dup length dict begin
- {1 index /FID ne {def} {pop pop} ifelse} forall
- /Encoding isolatin1encoding def
- currentdict end
-definefont pop
-/Times-BoldItalic-latin1
- /Times-BoldItalic findfont
- dup length dict begin
- {1 index /FID ne {def} {pop pop} ifelse} forall
- /Encoding isolatin1encoding def
- currentdict end
-definefont pop
-/AvantGarde-Book-latin1
- /AvantGarde-Book findfont
- dup length dict begin
- {1 index /FID ne {def} {pop pop} ifelse} forall
- /Encoding isolatin1encoding def
- currentdict end
-definefont pop
-/AvantGarde-BookOblique-latin1
- /AvantGarde-BookOblique findfont
- dup length dict begin
- {1 index /FID ne {def} {pop pop} ifelse} forall
- /Encoding isolatin1encoding def
- currentdict end
-definefont pop
-/AvantGarde-Demi-latin1
- /AvantGarde-Demi findfont
- dup length dict begin
- {1 index /FID ne {def} {pop pop} ifelse} forall
- /Encoding isolatin1encoding def
- currentdict end
-definefont pop
-/AvantGarde-DemiOblique-latin1
- /AvantGarde-DemiOblique findfont
- dup length dict begin
- {1 index /FID ne {def} {pop pop} ifelse} forall
- /Encoding isolatin1encoding def
- currentdict end
-definefont pop
-/Bookman-Light-latin1
- /Bookman-Light findfont
- dup length dict begin
- {1 index /FID ne {def} {pop pop} ifelse} forall
- /Encoding isolatin1encoding def
- currentdict end
-definefont pop
-/Bookman-LightItalic-latin1
- /Bookman-LightItalic findfont
- dup length dict begin
- {1 index /FID ne {def} {pop pop} ifelse} forall
- /Encoding isolatin1encoding def
- currentdict end
-definefont pop
-/Bookman-Demi-latin1
- /Bookman-Demi findfont
- dup length dict begin
- {1 index /FID ne {def} {pop pop} ifelse} forall
- /Encoding isolatin1encoding def
- currentdict end
-definefont pop
-/Bookman-DemiItalic-latin1
- /Bookman-DemiItalic findfont
- dup length dict begin
- {1 index /FID ne {def} {pop pop} ifelse} forall
- /Encoding isolatin1encoding def
- currentdict end
-definefont pop
-/Courier-latin1
- /Courier findfont
- dup length dict begin
- {1 index /FID ne {def} {pop pop} ifelse} forall
- /Encoding isolatin1encoding def
- currentdict end
-definefont pop
-/Courier-Oblique-latin1
- /Courier-Oblique findfont
- dup length dict begin
- {1 index /FID ne {def} {pop pop} ifelse} forall
- /Encoding isolatin1encoding def
- currentdict end
-definefont pop
-/Courier-Bold-latin1
- /Courier-Bold findfont
- dup length dict begin
- {1 index /FID ne {def} {pop pop} ifelse} forall
- /Encoding isolatin1encoding def
- currentdict end
-definefont pop
-/Courier-BoldOblique-latin1
- /Courier-BoldOblique findfont
- dup length dict begin
- {1 index /FID ne {def} {pop pop} ifelse} forall
- /Encoding isolatin1encoding def
- currentdict end
-definefont pop
-/Helvetica-latin1
- /Helvetica findfont
- dup length dict begin
- {1 index /FID ne {def} {pop pop} ifelse} forall
- /Encoding isolatin1encoding def
- currentdict end
-definefont pop
-/Helvetica-Oblique-latin1
- /Helvetica-Oblique findfont
- dup length dict begin
- {1 index /FID ne {def} {pop pop} ifelse} forall
- /Encoding isolatin1encoding def
- currentdict end
-definefont pop
-/Helvetica-Bold-latin1
- /Helvetica-Bold findfont
- dup length dict begin
- {1 index /FID ne {def} {pop pop} ifelse} forall
- /Encoding isolatin1encoding def
- currentdict end
-definefont pop
-/Helvetica-BoldOblique-latin1
- /Helvetica-BoldOblique findfont
- dup length dict begin
- {1 index /FID ne {def} {pop pop} ifelse} forall
- /Encoding isolatin1encoding def
- currentdict end
-definefont pop
-/Helvetica-Narrow-latin1
- /Helvetica-Narrow findfont
- dup length dict begin
- {1 index /FID ne {def} {pop pop} ifelse} forall
- /Encoding isolatin1encoding def
- currentdict end
-definefont pop
-/Helvetica-Narrow-Oblique-latin1
- /Helvetica-Narrow-Oblique findfont
- dup length dict begin
- {1 index /FID ne {def} {pop pop} ifelse} forall
- /Encoding isolatin1encoding def
- currentdict end
-definefont pop
-/Helvetica-Narrow-Bold-latin1
- /Helvetica-Narrow-Bold findfont
- dup length dict begin
- {1 index /FID ne {def} {pop pop} ifelse} forall
- /Encoding isolatin1encoding def
- currentdict end
-definefont pop
-/Helvetica-Narrow-BoldOblique-latin1
- /Helvetica-Narrow-BoldOblique findfont
- dup length dict begin
- {1 index /FID ne {def} {pop pop} ifelse} forall
- /Encoding isolatin1encoding def
- currentdict end
-definefont pop
-/NewCenturySchoolbook-Roman-latin1
- /NewCenturySchoolbook-Roman findfont
- dup length dict begin
- {1 index /FID ne {def} {pop pop} ifelse} forall
- /Encoding isolatin1encoding def
- currentdict end
-definefont pop
-/NewCenturySchoolbook-Italic-latin1
- /NewCenturySchoolbook-Italic findfont
- dup length dict begin
- {1 index /FID ne {def} {pop pop} ifelse} forall
- /Encoding isolatin1encoding def
- currentdict end
-definefont pop
-/NewCenturySchoolbook-Bold-latin1
- /NewCenturySchoolbook-Bold findfont
- dup length dict begin
- {1 index /FID ne {def} {pop pop} ifelse} forall
- /Encoding isolatin1encoding def
- currentdict end
-definefont pop
-/NewCenturySchoolbook-BoldItalic-latin1
- /NewCenturySchoolbook-BoldItalic findfont
- dup length dict begin
- {1 index /FID ne {def} {pop pop} ifelse} forall
- /Encoding isolatin1encoding def
- currentdict end
-definefont pop
-/Palatino-Roman-latin1
- /Palatino-Roman findfont
- dup length dict begin
- {1 index /FID ne {def} {pop pop} ifelse} forall
- /Encoding isolatin1encoding def
- currentdict end
-definefont pop
-/Palatino-Italic-latin1
- /Palatino-Italic findfont
- dup length dict begin
- {1 index /FID ne {def} {pop pop} ifelse} forall
- /Encoding isolatin1encoding def
- currentdict end
-definefont pop
-/Palatino-Bold-latin1
- /Palatino-Bold findfont
- dup length dict begin
- {1 index /FID ne {def} {pop pop} ifelse} forall
- /Encoding isolatin1encoding def
- currentdict end
-definefont pop
-/Palatino-BoldItalic-latin1
- /Palatino-BoldItalic findfont
- dup length dict begin
- {1 index /FID ne {def} {pop pop} ifelse} forall
- /Encoding isolatin1encoding def
- currentdict end
-definefont pop
-/Symbol-latin1
- /Symbol findfont
-definefont pop
-/ZapfChancery-MediumItalic-latin1
- /ZapfChancery-MediumItalic findfont
- dup length dict begin
- {1 index /FID ne {def} {pop pop} ifelse} forall
- /Encoding isolatin1encoding def
- currentdict end
-definefont pop
-/ZapfDingbats-latin1
- /ZapfDingbats findfont
- dup length dict begin
- {1 index /FID ne {def} {pop pop} ifelse} forall
- /Encoding isolatin1encoding def
- currentdict end
-definefont pop
-/cp {closepath} bind def
-/c {curveto} bind def
-/f {fill} bind def
-/a {arc} bind def
-/ef {eofill} bind def
-/ex {exch} bind def
-/gr {grestore} bind def
-/gs {gsave} bind def
-/sa {save} bind def
-/rs {restore} bind def
-/l {lineto} bind def
-/m {moveto} bind def
-/rm {rmoveto} bind def
-/n {newpath} bind def
-/s {stroke} bind def
-/sh {show} bind def
-/slc {setlinecap} bind def
-/slj {setlinejoin} bind def
-/slw {setlinewidth} bind def
-/srgb {setrgbcolor} bind def
-/rot {rotate} bind def
-/sc {scale} bind def
-/sd {setdash} bind def
-/ff {findfont} bind def
-/sf {setfont} bind def
-/scf {scalefont} bind def
-/sw {stringwidth pop} bind def
-/tr {translate} bind def
-
-/ellipsedict 8 dict def
-ellipsedict /mtrx matrix put
-/ellipse
-{ ellipsedict begin
- /endangle exch def
- /startangle exch def
- /yrad exch def
- /xrad exch def
- /y exch def
- /x exch def /savematrix mtrx currentmatrix def
- x y tr xrad yrad sc
- 0 0 1 startangle endangle arc
- savematrix setmatrix
- end
-} def
-
-/mergeprocs {
-dup length
-3 -1 roll
-dup
-length
-dup
-5 1 roll
-3 -1 roll
-add
-array cvx
-dup
-3 -1 roll
-0 exch
-putinterval
-dup
-4 2 roll
-putinterval
-} bind def
-%%EndProlog
-
-
-%%Page: 1 1
-gs
-90 rotate
-10.504277 -10.504277 scale
--7.390052 13.596868 translate
-n 15.000000 -5.986920 m 79.927437 -5.986920 l 79.927437 35.463012 l 15.000000 35.463012 l 15.000000 -5.986920 l clip
-0.100000 slw
-[] 0 sd
-[] 0 sd
-0 slc
-0 slj
-0 slc
-0 slj
-[] 0 sd
-1.000000 1.000000 1.000000 srgb
-n 28.288577 -5.936920 m 34.143683 -5.936920 l 34.952105 -5.936920 35.607460 -5.489205 35.607460 -4.936920 c 35.607460 -4.384635 34.952105 -3.936920 34.143683 -3.936920 c 28.288577 -3.936920 l 27.480155 -3.936920 26.824800 -4.384635 26.824800 -4.936920 c 26.824800 -5.489205 27.480155 -5.936920 28.288577 -5.936920 c f
-0.000000 0.000000 0.000000 srgb
-n 28.288577 -5.936920 m 34.143683 -5.936920 l 34.952105 -5.936920 35.607460 -5.489205 35.607460 -4.936920 c 35.607460 -4.384635 34.952105 -3.936920 34.143683 -3.936920 c 28.288577 -3.936920 l 27.480155 -3.936920 26.824800 -4.384635 26.824800 -4.936920 c 26.824800 -5.489205 27.480155 -5.936920 28.288577 -5.936920 c s
-/Courier-latin1 ff 0.800000 scf sf
-0.000000 0.000000 0.000000 srgb
-(post a msg) dup sw 2 div 31.216130 ex sub -4.742230 m gs 1 -1 sc sh gr
-1.000000 1.000000 1.000000 srgb
-n 31.228705 0.448229 m 34.632611 3.852135 l 31.228705 7.256041 l 27.824799 3.852135 l f
-0.100000 slw
-[] 0 sd
-[] 0 sd
-0 slj
-0.000000 0.000000 0.000000 srgb
-n 31.228705 0.448229 m 34.632611 3.852135 l 31.228705 7.256041 l 27.824799 3.852135 l cp s
-/Courier-latin1 ff 0.800000 scf sf
-0.000000 0.000000 0.000000 srgb
-(is a) dup sw 2 div 31.228705 ex sub 3.646825 m gs 1 -1 sc sh gr
-0.000000 0.000000 0.000000 srgb
-(member?) dup sw 2 div 31.228705 ex sub 4.446825 m gs 1 -1 sc sh gr
-0.100000 slw
-[] 0 sd
-[] 0 sd
-0 slc
-0.000000 0.000000 0.000000 srgb
-n 31.228700 0.448231 m 31.216100 -3.936920 l s
-0 slj
-0.000000 0.000000 0.000000 srgb
-n 30.826403 -0.350616 m 31.228700 0.448231 l 31.626400 -0.352915 l f
-1.000000 1.000000 1.000000 srgb
-n 22.333205 8.807639 m 25.737111 12.211545 l 22.333205 15.615451 l 18.929299 12.211545 l f
-0.100000 slw
-[] 0 sd
-[] 0 sd
-0 slj
-0.000000 0.000000 0.000000 srgb
-n 22.333205 8.807639 m 25.737111 12.211545 l 22.333205 15.615451 l 18.929299 12.211545 l cp s
-/Courier-latin1 ff 0.800000 scf sf
-0.000000 0.000000 0.000000 srgb
-(mod bit) dup sw 2 div 22.333205 ex sub 12.006235 m gs 1 -1 sc sh gr
-0.000000 0.000000 0.000000 srgb
-(set?) dup sw 2 div 22.333205 ex sub 12.806235 m gs 1 -1 sc sh gr
-0.100000 slw
-[] 0 sd
-[] 0 sd
-0 slc
-0.000000 0.000000 0.000000 srgb
-n 22.333200 8.807640 m 27.824800 3.852140 l s
-0 slj
-0.000000 0.000000 0.000000 srgb
-n 22.659157 7.974722 m 22.333200 8.807640 l 23.195108 8.568655 l f
-/Courier-latin1 ff 0.800000 scf sf
-0.000000 0.000000 0.000000 srgb
-() dup sw 2 div 15.000000 ex sub 5.000000 m gs 1 -1 sc sh gr
-/Courier-latin1 ff 0.800000 scf sf
-0.000000 0.000000 0.000000 srgb
-(yes) dup sw 2 div 28.675700 ex sub 3.001160 m gs 1 -1 sc sh gr
-/Courier-latin1 ff 0.800000 scf sf
-0.000000 0.000000 0.000000 srgb
-(yes) dup sw 2 div 19.780300 ex sub 11.360600 m gs 1 -1 sc sh gr
-/Courier-latin1 ff 0.800000 scf sf
-0.000000 0.000000 0.000000 srgb
-(no) dup sw 2 div 23.184200 ex sub 14.764500 m gs 1 -1 sc sh gr
-0.100000 slw
-[] 0 sd
-[] 0 sd
-0 slc
-0.000000 0.000000 0.000000 srgb
-n 34.632600 3.852140 m 40.261205 8.139600 l s
-0 slj
-0.000000 0.000000 0.000000 srgb
-n 39.382424 7.973037 m 40.261205 8.139600 l 39.867187 7.336637 l f
-/Courier-latin1 ff 0.800000 scf sf
-0.000000 0.000000 0.000000 srgb
-(no) dup sw 2 div 33.781600 ex sub 3.001160 m gs 1 -1 sc sh gr
-1.000000 1.000000 1.000000 srgb
-n 40.261205 8.139600 m 43.907510 11.959285 l 40.261205 15.778970 l 36.614900 11.959285 l f
-0.100000 slw
-[] 0 sd
-[] 0 sd
-0 slj
-0.000000 0.000000 0.000000 srgb
-n 40.261205 8.139600 m 43.907510 11.959285 l 40.261205 15.778970 l 36.614900 11.959285 l cp s
-/Courier-latin1 ff 0.800000 scf sf
-0.000000 0.000000 0.000000 srgb
-(explicit) dup sw 2 div 40.261205 ex sub 11.753975 m gs 1 -1 sc sh gr
-0.000000 0.000000 0.000000 srgb
-(accept?) dup sw 2 div 40.261205 ex sub 12.553975 m gs 1 -1 sc sh gr
-/Courier-latin1 ff 0.800000 scf sf
-0.000000 0.000000 0.000000 srgb
-(yes) dup sw 2 div 39.349629 ex sub 14.824049 m gs 1 -1 sc sh gr
-1.000000 1.000000 1.000000 srgb
-n 59.913105 8.346249 m 63.559411 11.992555 l 59.913105 15.638861 l 56.266799 11.992555 l f
-0.100000 slw
-[] 0 sd
-[] 0 sd
-0 slj
-0.000000 0.000000 0.000000 srgb
-n 59.913105 8.346249 m 63.559411 11.992555 l 59.913105 15.638861 l 56.266799 11.992555 l cp s
-/Courier-latin1 ff 0.800000 scf sf
-0.000000 0.000000 0.000000 srgb
-(explicit) dup sw 2 div 59.913105 ex sub 11.787245 m gs 1 -1 sc sh gr
-0.000000 0.000000 0.000000 srgb
-(reject?) dup sw 2 div 59.913105 ex sub 12.587245 m gs 1 -1 sc sh gr
-/Courier-latin1 ff 0.800000 scf sf
-0.000000 0.000000 0.000000 srgb
-(yes) dup sw 2 div 59.001528 ex sub 14.727284 m gs 1 -1 sc sh gr
-0.100000 slw
-[] 0 sd
-[] 0 sd
-0 slc
-0.000000 0.000000 0.000000 srgb
-n 54.324011 11.922575 m 56.266799 11.992555 l s
-0 slj
-0.000000 0.000000 0.000000 srgb
-n 55.452919 12.363498 m 56.266799 11.992555 l 55.481716 11.564017 l f
-/Courier-latin1 ff 0.800000 scf sf
-0.000000 0.000000 0.000000 srgb
-(no) dup sw 2 div 42.995934 ex sub 11.004364 m gs 1 -1 sc sh gr
-1.000000 1.000000 1.000000 srgb
-n 71.066405 8.389389 m 74.712711 12.035695 l 71.066405 15.682001 l 67.420099 12.035695 l f
-0.100000 slw
-[] 0 sd
-[] 0 sd
-0 slj
-0.000000 0.000000 0.000000 srgb
-n 71.066405 8.389389 m 74.712711 12.035695 l 71.066405 15.682001 l 67.420099 12.035695 l cp s
-/Courier-latin1 ff 0.800000 scf sf
-0.000000 0.000000 0.000000 srgb
-(explicit) dup sw 2 div 71.066405 ex sub 11.830385 m gs 1 -1 sc sh gr
-0.000000 0.000000 0.000000 srgb
-(discard?) dup sw 2 div 71.066405 ex sub 12.630385 m gs 1 -1 sc sh gr
-0.100000 slw
-[] 0 sd
-[] 0 sd
-0 slc
-0.000000 0.000000 0.000000 srgb
-n 63.559411 11.992555 m 67.420100 12.035700 l s
-0 slj
-0.000000 0.000000 0.000000 srgb
-n 66.615680 12.426735 m 67.420100 12.035700 l 66.624620 11.626785 l f
-/Courier-latin1 ff 0.800000 scf sf
-0.000000 0.000000 0.000000 srgb
-(no) dup sw 2 div 62.647834 ex sub 11.080979 m gs 1 -1 sc sh gr
-0.100000 slw
-[] 0 sd
-[] 0 sd
-0 slc
-0.000000 0.000000 0.000000 srgb
-n 71.066400 15.682000 m 71.055000 19.434500 l s
-0 slj
-0.000000 0.000000 0.000000 srgb
-n 70.657432 18.633289 m 71.055000 19.434500 l 71.457429 18.635719 l f
-/Courier-latin1 ff 0.800000 scf sf
-0.000000 0.000000 0.000000 srgb
-(yes) dup sw 2 div 70.154800 ex sub 14.770400 m gs 1 -1 sc sh gr
-/Courier-latin1 ff 0.800000 scf sf
-0.000000 0.000000 0.000000 srgb
-(no) dup sw 2 div 73.801100 ex sub 11.124100 m gs 1 -1 sc sh gr
-0.100000 slw
-[] 0 sd
-[] 0 sd
-0 slc
-0.000000 0.000000 0.000000 srgb
-n 59.913105 15.638861 m 59.907500 19.455400 l s
-0 slj
-0.000000 0.000000 0.000000 srgb
-n 59.508675 18.654813 m 59.907500 19.455400 l 60.308674 18.655988 l f
-0.100000 slw
-[] 0 sd
-[] 0 sd
-0 slj
-0 slc
-0.000000 0.000000 0.000000 srgb
-n 22.333200 15.615400 m 22.362400 21.044900 l 27.166900 21.015055 l s
-0 slj
-0.000000 0.000000 0.000000 srgb
-n 26.369400 21.420017 m 27.166900 21.015055 l 26.364431 20.620032 l f
-0.100000 slw
-[] 0 sd
-[] 0 sd
-0 slc
-0 slj
-0 slc
-0 slj
-[] 0 sd
-1.000000 1.000000 1.000000 srgb
-n 28.954977 29.425200 m 34.810083 29.425200 l 35.618505 29.425200 36.273860 29.964050 36.273860 30.628755 c 36.273860 31.293460 35.618505 31.832310 34.810083 31.832310 c 28.954977 31.832310 l 28.146555 31.832310 27.491200 31.293460 27.491200 30.628755 c 27.491200 29.964050 28.146555 29.425200 28.954977 29.425200 c f
-0.000000 0.000000 0.000000 srgb
-n 28.954977 29.425200 m 34.810083 29.425200 l 35.618505 29.425200 36.273860 29.964050 36.273860 30.628755 c 36.273860 31.293460 35.618505 31.832310 34.810083 31.832310 c 28.954977 31.832310 l 28.146555 31.832310 27.491200 31.293460 27.491200 30.628755 c 27.491200 29.964050 28.146555 29.425200 28.954977 29.425200 c s
-/Courier-latin1 ff 0.800000 scf sf
-0.000000 0.000000 0.000000 srgb
-(hold for) dup sw 2 div 31.882530 ex sub 30.423445 m gs 1 -1 sc sh gr
-0.000000 0.000000 0.000000 srgb
-(moderation) dup sw 2 div 31.882530 ex sub 31.223445 m gs 1 -1 sc sh gr
-0.100000 slw
-[] 0 sd
-[] 0 sd
-0 slc
-0 slj
-0 slc
-0 slj
-[] 0 sd
-1.000000 1.000000 1.000000 srgb
-n 28.666900 19.811500 m 34.666900 19.811500 l 35.495328 19.811500 36.166900 20.350350 36.166900 21.015055 c 36.166900 21.679760 35.495328 22.218610 34.666900 22.218610 c 28.666900 22.218610 l 27.838472 22.218610 27.166900 21.679760 27.166900 21.015055 c 27.166900 20.350350 27.838472 19.811500 28.666900 19.811500 c f
-0.000000 0.000000 0.000000 srgb
-n 28.666900 19.811500 m 34.666900 19.811500 l 35.495328 19.811500 36.166900 20.350350 36.166900 21.015055 c 36.166900 21.679760 35.495328 22.218610 34.666900 22.218610 c 28.666900 22.218610 l 27.838472 22.218610 27.166900 21.679760 27.166900 21.015055 c 27.166900 20.350350 27.838472 19.811500 28.666900 19.811500 c s
-/Courier-latin1 ff 0.800000 scf sf
-0.000000 0.000000 0.000000 srgb
-(pass thru) dup sw 2 div 31.666900 ex sub 21.209745 m gs 1 -1 sc sh gr
-0.100000 slw
-[] 0 sd
-[] 0 sd
-0 slc
-0 slj
-0 slc
-0 slj
-[] 0 sd
-1.000000 1.000000 1.000000 srgb
-n 57.222377 19.455400 m 62.592683 19.455400 l 63.334168 19.455400 63.935260 19.903115 63.935260 20.455400 c 63.935260 21.007685 63.334168 21.455400 62.592683 21.455400 c 57.222377 21.455400 l 56.480892 21.455400 55.879800 21.007685 55.879800 20.455400 c 55.879800 19.903115 56.480892 19.455400 57.222377 19.455400 c f
-0.000000 0.000000 0.000000 srgb
-n 57.222377 19.455400 m 62.592683 19.455400 l 63.334168 19.455400 63.935260 19.903115 63.935260 20.455400 c 63.935260 21.007685 63.334168 21.455400 62.592683 21.455400 c 57.222377 21.455400 l 56.480892 21.455400 55.879800 21.007685 55.879800 20.455400 c 55.879800 19.903115 56.480892 19.455400 57.222377 19.455400 c s
-/Courier-latin1 ff 0.800000 scf sf
-0.000000 0.000000 0.000000 srgb
-(bounce it) dup sw 2 div 59.907530 ex sub 20.650090 m gs 1 -1 sc sh gr
-0.100000 slw
-[] 0 sd
-[] 0 sd
-0 slc
-0 slj
-0 slc
-0 slj
-[] 0 sd
-1.000000 1.000000 1.000000 srgb
-n 67.885077 19.434500 m 74.224983 19.434500 l 75.100342 19.434500 75.809960 19.882215 75.809960 20.434500 c 75.809960 20.986785 75.100342 21.434500 74.224983 21.434500 c 67.885077 21.434500 l 67.009718 21.434500 66.300100 20.986785 66.300100 20.434500 c 66.300100 19.882215 67.009718 19.434500 67.885077 19.434500 c f
-0.000000 0.000000 0.000000 srgb
-n 67.885077 19.434500 m 74.224983 19.434500 l 75.100342 19.434500 75.809960 19.882215 75.809960 20.434500 c 75.809960 20.986785 75.100342 21.434500 74.224983 21.434500 c 67.885077 21.434500 l 67.009718 21.434500 66.300100 20.986785 66.300100 20.434500 c 66.300100 19.882215 67.009718 19.434500 67.885077 19.434500 c s
-/Courier-latin1 ff 0.800000 scf sf
-0.000000 0.000000 0.000000 srgb
-(discard it) dup sw 2 div 71.055030 ex sub 20.629190 m gs 1 -1 sc sh gr
-0.100000 slw
-[] 0 sd
-[] 0 sd
-0 slj
-0 slc
-0.000000 0.000000 0.000000 srgb
-n 40.261205 15.778970 m 40.184200 21.044900 l 36.166900 21.015055 l s
-0 slj
-0.000000 0.000000 0.000000 srgb
-n 36.969849 20.621009 m 36.166900 21.015055 l 36.963906 21.420987 l f
-1.000000 1.000000 1.000000 srgb
-n 65.017305 25.865999 m 69.790811 30.639505 l 65.017305 35.413011 l 60.243799 30.639505 l f
-0.100000 slw
-[] 0 sd
-[] 0 sd
-0 slj
-0.000000 0.000000 0.000000 srgb
-n 65.017305 25.865999 m 69.790811 30.639505 l 65.017305 35.413011 l 60.243799 30.639505 l cp s
-/Courier-latin1 ff 0.800000 scf sf
-0.000000 0.000000 0.000000 srgb
-(generic) dup sw 2 div 65.017305 ex sub 30.034195 m gs 1 -1 sc sh gr
-0.000000 0.000000 0.000000 srgb
-(non-member) dup sw 2 div 65.017305 ex sub 30.834195 m gs 1 -1 sc sh gr
-0.000000 0.000000 0.000000 srgb
-(disposition) dup sw 2 div 65.017305 ex sub 31.634195 m gs 1 -1 sc sh gr
-0.100000 slw
-[] 0 sd
-[] 0 sd
-0 slj
-0 slc
-0.000000 0.000000 0.000000 srgb
-n 74.712700 12.035700 m 77.310000 12.068400 l 77.310000 30.668100 l 69.790800 30.639500 l s
-0 slj
-0.000000 0.000000 0.000000 srgb
-n 70.592316 30.242546 m 69.790800 30.639500 l 70.589273 31.042540 l f
-/Courier-latin1 ff 0.800000 scf sf
-0.000000 0.000000 0.000000 srgb
-(discard) dup sw 2 div 68.632800 ex sub 24.246900 m gs 1 -1 sc sh gr
-0.100000 slw
-[] 0 sd
-[] 0 sd
-0 slc
-0.000000 0.000000 0.000000 srgb
-n 66.210600 27.059400 m 71.055000 21.434500 l s
-0 slj
-0.000000 0.000000 0.000000 srgb
-n 70.836024 22.301708 m 71.055000 21.434500 l 70.229848 21.779644 l f
-0.100000 slw
-[] 0 sd
-[] 0 sd
-0 slc
-0.000000 0.000000 0.000000 srgb
-n 63.823900 27.059400 m 59.907500 21.455400 l s
-0 slj
-0.000000 0.000000 0.000000 srgb
-n 60.693636 21.882004 m 59.907500 21.455400 l 60.037899 22.340271 l f
-/Courier-latin1 ff 0.800000 scf sf
-0.000000 0.000000 0.000000 srgb
-(reject) dup sw 2 div 61.865700 ex sub 24.257400 m gs 1 -1 sc sh gr
-0.100000 slw
-[] 0 sd
-[] 0 sd
-0 slc
-0.000000 0.000000 0.000000 srgb
-n 60.243800 30.639500 m 36.273860 30.628755 l s
-0 slj
-0.000000 0.000000 0.000000 srgb
-n 37.074039 30.229114 m 36.273860 30.628755 l 37.073681 31.029114 l f
-/Courier-latin1 ff 0.800000 scf sf
-0.000000 0.000000 0.000000 srgb
-(hold) dup sw 2 div 48.258830 ex sub 30.634128 m gs 1 -1 sc sh gr
-0.100000 slw
-[] 0 sd
-[] 0 sd
-0 slj
-0 slc
-0.000000 0.000000 0.000000 srgb
-n 18.929299 12.211545 m 17.707519 12.274592 l 17.707519 30.574592 l 27.491200 30.628755 l s
-0 slj
-0.000000 0.000000 0.000000 srgb
-n 26.688998 31.024320 m 27.491200 30.628755 l 26.693427 30.224332 l f
-0.100000 slw
-[] 0 sd
-[] 0 sd
-0 slc
-0.000000 0.000000 0.000000 srgb
-n 61.437100 29.446100 m 35.727550 21.866089 l s
-0 slj
-0.000000 0.000000 0.000000 srgb
-n 36.608013 21.708655 m 35.727550 21.866089 l 36.381775 22.475998 l f
-/Courier-latin1 ff 0.800000 scf sf
-0.000000 0.000000 0.000000 srgb
-(accept) dup sw 2 div 48.582325 ex sub 25.656094 m gs 1 -1 sc sh gr
-1.000000 1.000000 1.000000 srgb
-n 50.677705 8.276269 m 54.324011 11.922575 l 50.677705 15.568881 l 47.031399 11.922575 l f
-0.100000 slw
-[] 0 sd
-[] 0 sd
-0 slj
-0.000000 0.000000 0.000000 srgb
-n 50.677705 8.276269 m 54.324011 11.922575 l 50.677705 15.568881 l 47.031399 11.922575 l cp s
-/Courier-latin1 ff 0.800000 scf sf
-0.000000 0.000000 0.000000 srgb
-(explicit) dup sw 2 div 50.677705 ex sub 11.717265 m gs 1 -1 sc sh gr
-0.000000 0.000000 0.000000 srgb
-(hold?) dup sw 2 div 50.677705 ex sub 12.517265 m gs 1 -1 sc sh gr
-/Courier-latin1 ff 0.800000 scf sf
-0.000000 0.000000 0.000000 srgb
-(yes) dup sw 2 div 49.766128 ex sub 14.657304 m gs 1 -1 sc sh gr
-/Courier-latin1 ff 0.800000 scf sf
-0.000000 0.000000 0.000000 srgb
-(no) dup sw 2 div 53.412434 ex sub 11.010998 m gs 1 -1 sc sh gr
-0.100000 slw
-[] 0 sd
-[] 0 sd
-0 slj
-0 slc
-0.000000 0.000000 0.000000 srgb
-n 50.677705 15.568881 m 50.723859 19.674592 l 35.845120 29.777721 l s
-0 slj
-0.000000 0.000000 0.000000 srgb
-n 36.282254 28.997392 m 35.845120 29.777721 l 36.731664 29.659231 l f
-0.100000 slw
-[] 0 sd
-[] 0 sd
-0 slc
-0.000000 0.000000 0.000000 srgb
-n 43.907510 11.959285 m 47.031399 11.922575 l s
-0 slj
-0.000000 0.000000 0.000000 srgb
-n 46.236154 12.331948 m 47.031399 11.922575 l 46.226754 11.532003 l f
-/Courier-latin1 ff 2.000000 scf sf
-0.000000 0.000000 0.000000 srgb
-(Sender Moderation Flowchart) dup sw 2 div 57.443403 ex sub 1.624592 m gs 1 -1 sc sh gr
-gr
-showpage
-