diff options
| -rw-r--r-- | ACKNOWLEDGMENTS | 4 | ||||
| -rw-r--r-- | FAQ | 19 | ||||
| -rw-r--r-- | INSTALL | 589 | ||||
| -rw-r--r-- | NEWS | 389 | ||||
| -rw-r--r-- | README | 211 | ||||
| -rw-r--r-- | README.BSD | 27 | ||||
| -rw-r--r-- | README.EXIM | 348 | ||||
| -rw-r--r-- | README.LINUX | 56 | ||||
| -rw-r--r-- | README.MACOSX | 31 | ||||
| -rw-r--r-- | README.POSTFIX | 223 | ||||
| -rw-r--r-- | README.QMAIL | 186 | ||||
| -rw-r--r-- | README.SENDMAIL | 73 | ||||
| -rw-r--r-- | STYLEGUIDE.txt | 175 | ||||
| -rw-r--r-- | UPGRADING | 101 |
14 files changed, 628 insertions, 1804 deletions
diff --git a/ACKNOWLEDGMENTS b/ACKNOWLEDGMENTS index d5cdf3e83..e184d9514 100644 --- a/ACKNOWLEDGMENTS +++ b/ACKNOWLEDGMENTS @@ -66,6 +66,7 @@ in answering questions on mailman-users. Ted Cabeen Mentor Cana John Carnes + Julio A. Cartaya Claudio Cattazzo Donn Cave David Champion @@ -199,6 +200,7 @@ in answering questions on mailman-users. Mikhail Sobolev Greg Stein Dale Stimson + Students of HIT <mailman-cn@mail.cs.hit.edu.cn> Szabolcs Szigeti Vizi Szilard David T-G @@ -220,6 +222,8 @@ in answering questions on mailman-users. Ousmane Wilane Dan Wilder Seb Wills + Dai Xiaoguang + Ping Yeh YASUDA Yukihiro Michael Yount Blair Zajac @@ -1,5 +1,5 @@ Mailman - The GNU Mailing List Management System -Copyright (C) 1998,1999,2000,2001,2002 by the Free Software Foundation, Inc. +Copyright (C) 1998-2005 by the Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA Note: We're migrating the FAQ to an on-line interactive system called @@ -40,19 +40,14 @@ A. These headers are described in RFC 2369 and are added by Mailman Q. Can I put the user's address in the footer that Mailman adds to each message? -A. Yes, in Mailman 2.1. The site admin needs to enable - personalization by setting the following variables in the mm_cfg.py - file: +A. Yes, in Mailman 2.1. The site admin needs to enable personalization by + setting the following variable in the mm_cfg.py file: - VERP_PASSWORD_REMINDERS = 1 - VERP_PERSONALIZED_DELIVERIES = 1 - VERP_DELIVERY_INTERVAL = 1 - VERP_CONFIRMATIONS = 1 + OWNERS_CAN_ENABLE_PERSONALIZATION = Yes - Once this is done, list admins can enable personalization for - regular delivery members (digest deliveries can't be - personalized currently). A personalized list can include the - user's address in the footer. + Once this is done, list admins can enable personalization for regular + delivery members (digest deliveries can't be personalized currently). A + personalized list can include the user's address in the footer. Q. My users hate HTML in their email and for security reasons, I want to strip out all MIME attachments. How can I do this? @@ -1,586 +1,21 @@ Mailman - The GNU Mailing List Management System -Copyright (C) 1998-2003 Free Software Foundation, Inc. +Copyright (C) 1998-2005 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA -This file contains installation instructions for GNU Mailman, which is -configured using the standard GNU autoconf software. You first need -to prepare your system as outlined in the sections below, and then -configure and install the Mailman software. +The installation and upgrading instructions are now completely contained in +the Mailman Installation Guide. Web, PostScript, PDF, and plaintext formats +for this guide are available both within this source distribution and online. -UPGRADING: Upgrading is usually as easy as just installing the new -version over the existing installation. However, you should read the -notes in the file UPGRADING for important information before you -upgrade. +All manuals within this source distribution are provided in the admin/www +directory: + HTML : admin/www/mailman-install/index.html + PostScript : admin/www/mailman-install.ps + PDF : admin/www/mailman-install.pdf + plain text : admin/www/mailman-install.txt -0. Installation requirements - - You must have a mail server (MTA) that you can send messages to, - and a web server that supports the CGI/1.1 API. Apache makes a - fine choice for web server, and MTAs such as Postfix, Exim, - Sendmail, and qmail should work just fine. - - You will need an ANSI C compiler to build Mailman's security - wrappers. The GNU C compiler gcc 2.8.1 or later is known to work - well. For more information about obtaining gcc, see - - http://www.gnu.org - - You must have the Python interpreter installed somewhere on your - system. Currently Python 2.1.3 or Python 2.2.1 is recommended. - For information about obtaining Python source code, RPM packages, - or pre-compiled binaries please see: - - http://www.python.org - - If you are building Python from source, you should be fine with - the standard "./configure ; make install" for most Unix-like - OSes. If you run "make test", you'll see a bunch of tests skipped - -- don't worry, you probably won't need them. Mailman tries to - stick to the basics that compile on most systems. - - If there is a README.<yourMTA> file that describes your mail - server (MTA), read it now. Some MTAs can be integrated more - seamlessly with Mailman for support of some advanced features - (like creation and removal of lists through-the-web). Examples - are Exim and Postfix. Setup instructions for specific MTAs are - contained in these README files. - - -1. System setup - - You will need to be root to perform the steps in this section. - - Before installing the Mailman software, you need to prepare your - system by adding certain users and groups. - - - Add a new user called `mailman'. Typically this is added to - your /etc/passwd file. If username `mailman' is already in use, - choose something else unique and see the --with-username flag - below. - - - Add a new group called `mailman'. Typically this is added to - your /etc/group file. The Mailman files will be installed under - the `mailman' group, with the set-group-id bit. Mailman's - security is based on group-ownership permissions, so it is - important to get this step right. If groupname `mailman' is - already in use, choose something else unique and see the - --with-groupname below. The mailman user created in the - previous step must be a member of this group. - - - Create an installation directory (called $prefix in the - documentation that follows). All of the Mailman files will be - installed under $prefix. Run "configure --help" for ways to - split the installation based on read-only vs. read/write files. - - The default installation directory for Mailman 2.1 is - /usr/local/mailman. It used to be /home/mailman for all - versions prior to Mailman 2.1alpha2. You can override the - default by using the --prefix option to configure (see below). - If you're upgrading from a version previous to Mailman 2.1, you - will need to use --prefix unless you move your mailing lists - (this can be a wise upgrade strategy). - - Watch out if your site does something like mount /usr/local with - the nosuid option. This will break Mailman, which relies on - set-gid programs for its security. If this describes your - environment, simply install Mailman in a location that allows - setgid programs. - - Make sure the install directory is set to group `mailman' (or - whatever you're going to specify as --with-groupname) and has - the setgid bit set (but see README.BSD if you're on a BSD - system). You probably also want to guarantee that this - directory is readable and executable by everyone. For example, - these shell commands will accomplish this: - - % cd $prefix - % chgrp mailman . - % chmod a+rx,g+ws . - - You are now ready to configure and install the Mailman software. - - -2. Running configure - - TAKE SPECIAL NOTE OF THE --with-mail-gid AND --with-cgi-gid - OPTIONS BELOW. YOU WILL PROBABLY NEED TO USE THESE! - - You should not be root while performing the steps in this section. - Do them under your own login, or whatever account you typically - use to install software. You do not need to do these steps as - user mailman, but you could. However, make sure that the login - used is a member of the mailman group as that that group has write - permissions to the $prefix directory made in the previous step. - - Make sure that you have write permissions to the target - installation directory, and permission to create a setgid file in - the file system where it resides (NFS and other mounts can be - configured to inhibit setgid settings). - - If you've installed other GNU software, you should be familiar - with the configure script. Usually you can just cd to the - directory you unpacked the Mailman source tarball into, and run - configure with no arguments: - - % cd mailman-<version> - % ./configure - % make install - - The following options allow you to customize your Mailman - installation. - - --prefix=<dir> - Standard GNU configure option which changes the base - directory that Mailman is installed into. By default - $prefix is /usr/local/mailman. This directory must - already exist, and be set up as described in section 1 - above. - - --exec-prefix=<dir> - Standard GNU configure option which lets you specify a - different installation directory for architecture - dependent binaries. - - --with-var-prefix=<dir> - Store mutable data under <dir> instead of under the prefix - or exec_prefix. - - --with-python=</path/to/python> - Specify an alternative Python interpreter to use for the - wrapper programs. The default is to use the interpreter - found first on your shell's $PATH. Note that when running - the scripts from the command line, the first Python - interpreter found on $PATH is always used. - - --with-username=<username-or-uid> - Specify a different username than `mailman' to use as a - default. Use this only if the username `mailman' is - already in use by somebody (e.g. Mark Ailman's login - name). This switch can take an integer user id or a user - name. Be sure your $prefix directory is owned by this - user. - - --with-groupname=<groupname-or-gid> - Specify a different groupname than `mailman' to use as a - default. Use this only if the groupname `mailman' is - already in use. This switch can take an integer group id - or a group name. Be sure your $prefix directory is - group-owned by this group. - - --with-mail-gid=<group-or-groups> - Specify an alternative group for running scripts via the - mail wrapper. <group-or-groups> can be a list of one or - more integer group ids or symbolic group names. The first - value in the list that resolves to an existing group is - used. By default, the value is the list - `mailman other mail daemon'. - - This is highly system dependent and you must get this - right, because the group id is compiled into the mail - wrapper program for added security. On systems using - sendmail, the sendmail.cf configuration file designates - the group id of sendmail processes using the "DefaultUser" - option. (If commented out, it still may be indicating the - default...) - - Check your MTA's documentation and configuration files to - find the right value for this switch. - - --with-cgi-gid=<group-or-groups> - Specify an alternative group for running scripts via the - CGI wrapper. <group-or-groups> can be a list of one or - more integer group ids or symbolic group names. The first - value in the list that resolves to an existing group is - used. By default, the value is the the list - `www www-data nobody'. - - The proper value for this is dependent on your web server - configuration. You must get this right, because the group - id is compiled into the CGI wrapper program for added - security, and no Mailman CGI scripts will run if this is - incorrect. - - If you're using Apache, check the values for the `Group' - option in your httpd.conf file. - - --with-cgi-ext=<extension> - Specify an extension for cgi-bin programs. The CGI - wrappers placed in $PREFIX/cgi-bin will have this - extension (some web servers require an extension). - <extension> must include the dot. - - --with-gcc=no - Don't use gcc, even if it is found. In this case, `cc' - must be found on your $PATH. - - -3. Check your installation - - After you've run "make install", you can check that your - installation has all the correct permissions and group ownerships - by running the check_perms script: - - - cd to $prefix - - - Run bin/check_perms - - Don't try to run bin/check_perms from the source directory; it - will only run from the install (i.e. $prefix) directory. - - If this reports no problems, then it's very likely <wink> that - your installation is set up correctly. If it reports problems, - then you can either fix them manually, re-run the installation, or - use check_perms to fix the problems (probably the easiest - solution): - - - You need to become the user that did the installation (and that - owns all the files in $prefix), or root. - - - Run bin/check_perms -f - - - Repeat previous step until no more errors are reported! - - -4. Final system set-up - - Congratulations! You've installed the Mailman software. To get - everything running you need to hook Mailman up to both your web - server and your mail system. - - - If you plan on running your MTA and web server on different - machines, sharing Mailman installations via NFS, be sure that - the clocks on those two machines are synchronized closely. You - might take a look at the file Mailman/LockFile.py; the constant - CLOCK_SLOP helps the locking mechanism compensate for clock skew - in this type of environment. - - - Configure your web server to give $prefix/cgi-bin permission to - run CGI scripts. You probably need to be root to do this. - - The line you should add might look something like the following - (with the real absolute directory substituted for $prefix, of - course): - - Exec /mailman/* $prefix/cgi-bin/* - or: - ScriptAlias /mailman/ $prefix/cgi-bin/ - - Consult your web server's documentation for details. - - - You want to be very sure that the user id under which your CGI - scripts run is *not* in the `mailman' group you created above, - otherwise private archives will be accessible to anyone. - - - Copy the Mailman, Python, and GNU logos to a location accessible - to your web server. E.g. with Apache, you've usually got an - `icons' directory that you can drop the images into. For - example: - - % cp $prefix/icons/*.{jpg,png} /path/to/apache/icons - - You then want to add a line to your $prefix/Mailman/mm_cfg.py - file which sets the base URL for the logos. For example: - - IMAGE_LOGOS = '/images/' - - The default value for IMAGE_LOGOS is '/icons/'. Read the - comment in Defaults.py.in for details. - - - Configure your web server to point to the Pipermail public - mailing list archives: - - For example, in Apache: - - Alias /pipermail/ $varprefix/archives/public/ - - where $varprefix is usually $prefix unless you've used the - --with-var-prefix option to configure. - - Consult your web server's documentation for details. Also be - sure to configure your web server to follow symbolic links in - this directory, otherwise public Pipermail archives won't be - accessible. For Apache users, consult the FollowSymLinks - option. - - Also, if you're going to be supporting internationalized public - archives, you will probably want to turn off any default charset - directive for the Pipermail directory, otherwise your - multilingual archive pages won't show up correctly. Here's an - example for Apache, based on the standard installation - directories: - - <Directory "/usr/local/mailman/archives/public/"> - AddDefaultCharset Off - </Directory> - - Now restart your web server. - - - Create a "site-wide" mailing list. This is the one that - password reminders will appear to come from. Usually this - should be the "mailman" mailing list, but if you need to change - this, be sure to change the MAILMAN_SITE_LIST variable in - mm_cfg.py (see below). - - % bin/newlist mailman - - Follow the prompts, and see the README file for more - information. - - Now configure your site list. There is a convenient template - for a generic site list in misc/sitelist.cfg to help you with - this. The template can be applied to your site list by running: - - % bin/config_list -i data/sitelist.cfg mailman - - Before doing this, review the configuration options in the - template (note that many options are not changed by - sitelist.cfg). After you do this, be sure you review the - configurations via the admin pages for this list. - - Be sure to subscribe yourself to the site list, but use the - admin interface because mailback subscription confirmations - won't work at this point. - - - Set up the crontab entries. Mailman runs a number of cron jobs - for its basic functionality. Note that if you're upgrading from - a previous version of Mailman, you'll want to install the new - crontab, but be careful if you're running multiple Mailman - installations on your site! Changing the crontab could mess - with other parallel Mailman installations. - - If your version of crontab supports the -u option, you must be - root to do this next step. Add $prefix/cron/crontab.in as a - crontab entry by executing these commands: - - % cd $prefix/cron - % crontab -u mailman crontab.in - - If you used the --with-username option, use that user name - instead of mailman for the -u argument value. If your crontab - does not support the -u option, try these commands: - - % cd $prefix/cron - % su - mailman - % crontab crontab.in - - - Start the Mailman qrunner daemon, by executing the following - from the $prefix directory: - - % bin/mailmanctl start - - If you want to start Mailman every time you reboot your system, - and your OS supports the chkconfig command (e.g. RedHat and - Mandrake Linuxes) you can simply do the following (as root, from - the Mailman install directory): - - % cp scripts/mailman /etc/init.d/mailman - % chkconfig --add mailman - - (Note that /etc/init.d may be /etc/rc.d/init.d on some systems.) - - On Debian, you probably want to use - - % update-rc.d mailman defaults - - instead of chkconfig. - - For Unixes that don't support chkconfig, simply copy - scripts/mailman as above: - - % cp scripts/mailman /etc/init.d/mailman - - then set up the following symbolic links, again as root: - - % cp misc/mailman /etc/init.d - % cd /etc/rc.d/rc0.d - % ln -s ../init.d/mailman K12mailman - % cd ../rc1.d - % ln -s ../init.d/mailman K12mailman - % cd ../rc2.d - % ln -s ../init.d/mailman S98mailman - % cd ../rc3.d - % ln -s ../init.d/mailman S98mailman - % cd ../rc4.d - % ln -s ../init.d/mailman S98mailman - % cd ../rc5.d - % ln -s ../init.d/mailman S98mailman - % cd ../rc6.d - % ln -s ../init.d/mailman K12mailman - - - Check the values for DEFAULT_EMAIL_HOST and DEFAULT_URL_HOST in - Defaults.py. Make any necessary changes in the mm_cfg.py file. - Note that if you change either of these two values, you'll want - to add the following afterwards in the mm_cfg.py file: - - add_virtualhost(DEFAULT_URL_HOST, DEFAULT_EMAIL_HOST) - - -5. Customize Mailman - - You should do these steps using the account you installed Mailman - under in section 2 above. - - - The file $prefix/Mailman/Defaults.py contains a number of - defaults for your installation. If any of these are incorrect, - override them in $prefix/Mailman/mm_cfg.py, NOT IN Defaults.py! - See the comments in Defaults.py for details. Once a list is - created, editing many of these variables will have no effect. - At that point, you'll need to configure your lists through the - web admin interface or through the command line script - bin/withlist or bin/config_list. - - The install process will not overwrite an existing mm_cfg.py - file so you can freely make changes to this file. - - Note: Do *not* change HOME_DIR or MAILMAN_DIR. These are set - automatically by the configure script. - - - Create the site password using: - - % $prefix/bin/mmsitepass <your-site-password> - - This password can be used anywhere that individual user or - mailing list administrator passwords are required, giving the - mailman site administrator the ability to adjust these things - when necessary. - - You may also want to create a password for the site-wide "list - creator" role (someone other than the site administrator who as - privileges to create and remove lists through the web). Use the - -c option to mmsitepass to set this. - - -6. Getting started - - See the README file under the section "CREATE YOUR FIRST LIST" for - a quick introduction to creating an initial test list. - - -7. Troubleshooting - - If you encounter problems with running Mailman, first check the - "Common Problems" section, below. If your problem is not covered - there, check both the FAQ file and the online FAQ Wizard. Also - check for errors your syslog files and in the $prefix/logs/error - file. - - Where syslog lives on your particular machine may vary. It may be - in /var/log/maillog. It may also be in /var/log/syslog. On many - machines, syslog files live in /adm/log/ instead of /var/log. - - If you encounter an error, send an error report to - mailman-users@python.org. Include a description of what you're - doing to cause the problem, and the relevant lines from your - syslog. Also include information on your operating system, which - version of Python you're using, and which version of Mailman - you're installing. - - -8. Common Problems - - Problem: All Mailman web pages give a 404 File not found error. - - Solution: Your web server has not been set up properly for handling - Mailman's cgi commands. Make sure you've: - - 1) Configured the web server to give permissions to - $prefix/cgi-bin - 2) Restarted the web server properly. - - Consult your web server's documentation for instructions - on how to do these things. - - - Problem: All Mailman web pages give an "Internal Server Error". - - Solution: The likely problem is that you are using the wrong GID or - UID for CGI scripts. Check your syslog. If you see, for - example, a line like: - - Attempt to exec script with invalid gid 51, expected 99 - - You need to reinstall Mailman, and specify $CGI_GID to be 51, - as described in the installation instructions. - - - Problem: I send mail to the list, and get back mail saying the - list is not found! - - Solution: You probably didn't add the necessary aliases to the system - alias database, given to you when you ran the newlist - command. If you did add them, you likely did not update - the alias database, or your system requires you to run - newaliases explicitly. Refer to section 5 above for - more information. - - - Problem: I send mail to the list, and get back mail saying, - "unknown mailer error". - - Solution: The likely problem is that you are using the wrong GID or - UID for mail. Check your syslog. If you see, for - example, a line like: - - Attempt to exec script with invalid gid 51, expected 99 - - You need to reinstall Mailman, and specify $MAIL_GID to - be 51, as described in the installation - instructions. see notes on Postfix below, as by default - it will create these problems on installation. - - - Problem: I use Postfix for my MTA and the mail wrapper programs - are logging complaints about the wrong GID. - - Solution: Create a separate aliases file for Postfix in its - main.cf config file under the variable "alias_maps". Put - the file somewhere in Mailman's home directory, or - somewhere else where the user mailman has write access - to it; *as user mailman* call Postfix's "postalias" on the - alias file. - - % postalias <the alias file> - - Also as user mailman, run - - % python -c'import os; print os.getgid()' - - This should print out the group id that Mailman should - be configured to expect when the mail wrapper programs - are run. Call it "thegid". Rebuild Mailman with - - % ./configure --with-mail-gid=thegid - - See also the README.POSTFIX file for more information on - connecting Postfix and Mailman. - - - Problem: I send mail to the list, and get back mail saying, - "sh: mailman not available for sendmail programs" - - Solution: Your system uses sendmail restricted shell (smrsh). You - need to configure smrsh by creating a symbolic link from - the mail wrapper ($prefix/mail/mailman) to the directory - identifying executables allowed to run under smrsh. - - Some common names for this directory are - /var/admin/sm.bin, /usr/admin/sm.bin or /etc/smrsh. - - Note that on Debian Linux, the system makes - /usr/lib/sm.bin, which is wrong, you will need to create - the directory /usr/admin/sm.bin and add the link there. - Note further any aliases newaliases spits out will need - to be adjusted to point to the secure link to the - wrapper. - - - Problem: I messed up when I called configure. How do I clean - things up and re-install? - - Solution: % make clean - % ./configure --with-the-right-options - % make install +Or go online at http://www.list.org/site.html to find the online installation +guide. @@ -1,16 +1,397 @@ Mailman - The GNU Mailing List Management System -Copyright (C) 1998-2003 by the Free Software Foundation, Inc. +Copyright (C) 1998-2005 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.2 alpha 1 (XX-XXX-200X) +2.1.7 (XX-XXX-200X) - - STEALTH_MODE defaults to On and is now configurable via mm_cfg.py + New Features - - Integrated Catalan support from Robert Garrigós and Toni Panadčs. + - List owners can customize content filter behavior as not to collapse + multipart/alternative to its first content. This allows HTML part + to pass through after other content filtering is done. - Bug fixes ported forward from 2.1.3, including + Bug fixes and other patches + + - Logging/Logger.py unicode transform option (1235567). + + - bin/update crashes with bogus files (949117). + +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 admin/www/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. @@ -1,79 +1,73 @@ Mailman - The GNU Mailing List Management System -Copyright (C) 1998,1999,2000,2001,2002 by the Free Software Foundation, Inc. +Copyright (C) 1998-2005 by the Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA INTRODUCTION - This is GNU Mailman, a mailing list management system distributed - under the terms of the GNU General Public License (GPL). The name - of this software is spelled "Mailman" with a leading capital `M' - but with a lower case second `m'. Any other spelling is - incorrect. + This is GNU Mailman, a mailing list management system distributed under + the terms of the GNU General Public License (GPL). The name of this + software is spelled "Mailman" with a leading capital `M' but with a lower + case second `m'. Any other spelling is incorrect. - Mailman is written primarily in Python, a free object-oriented - scripting language. There is some ANSI C code for security - purposes. + Mailman is written primarily in Python, a free object-oriented scripting + language. There is some ANSI C code for security purposes. - Mailman was originally developed by John Viega. Subsequent - development (through version 1.0b3) was by Ken Manheimer. Further - work towards the 1.0 final release was a group effort, with the - core contributors being: Barry Warsaw, Ken Manheimer, Scott - Cotton, Harald Meland, and John Viega. Version 1.0 and beyond - have been primarily maintained by Barry Warsaw with contributions - from many; see the ACKNOWLEDGMENTS file for details. Jeremy + Mailman was originally developed by John Viega. Subsequent development + (through version 1.0b3) was by Ken Manheimer. Further work towards the + 1.0 final release was a group effort, with the core contributors being: + Barry Warsaw, Ken Manheimer, Scott Cotton, Harald Meland, and John Viega. + Version 1.0 and beyond have been primarily maintained by Barry Warsaw with + contributions from many; see the ACKNOWLEDGMENTS file for details. Jeremy Hylton helped considerably with the Pipermail code in Mailman 2.0. - The Mailman home page is + The Mailman home page is: - http://www.gnu.org/software/mailman + http://www.list.org - with mirrors at + with mirrors at: - http://www.list.org + http://www.gnu.org/software/mailman http://mailman.sf.net - Mailman 2.1 requires Python 2.1.3 or greater, which can be - downloaded from + Mailman 2.2 requires Python 2.3.5 or greater, which can be downloaded from: http://www.python.org - It is recommended that you use Python 2.1.3 or Python 2.2.1, the - latest releases as of this writing. Mailman 2.1 is not compatible - with Python 2.0 or any earlier version. + It is recommended that you use Python 2.4.1, the latest release as of this + writing (28-Aug-2005). + + http://www.python.org/2.4.1 - You will also need an ANSI C compiler to build both Python and - Mailman; gcc (the GNU C compiler) works just fine. Mailman - currently works only on GNU/Linux and other Unix-like operating - systems (e.g. Solaris, *BSD, MacOSX, etc.). It does not run on - Windows, although web and mail clients on any platform should be - able to interact with Mailman just fine. + You will also need an ANSI C compiler to build both Python and Mailman; + gcc (the GNU C compiler) works just fine. Mailman currently works only on + GNU/Linux and other Unix-like operating systems (e.g. Solaris, *BSD, + MacOSX, etc.). It does not run on Windows, although web and mail clients + on any platform should be able to interact with Mailman just fine. - See the INSTALL file for installation instructions. If you are - upgrading from a previous version of Mailman, you need to read the - UPGRADING file for important information. + See the INSTALL file for installation instructions. If you are upgrading + from a previous version of Mailman, you need to read the UPGRADING file + for important information. FEATURES - Read the NEWS file for a list of changes since version 0.9. Read - the TODO file for our (extensive) wish list. You can see Mailman - 2.1 in action at + Read the NEWS file for a list of changes since version 0.9. Read the TODO + file for our (extensive) wish list. You can see Mailman 2.1 in action at: http://mail.python.org/mailman-21/listinfo - Mailman has most of the standard features you'd expect in a - mailing list manager, and more: + Mailman has most of the standard features you'd expect in a mailing list + manager, and more: - Web based list administration for nearly all tasks. Web based - subscriptions and user configuration management. A customizable - "home page" for each mailing list. + subscriptions and user configuration management. A customizable "home + page" for each mailing list. - - Privacy features such as moderation, open and closed list - subscription policies, private membership rosters, and - sender-based filters. + - Privacy features such as moderation, open and closed list subscription + policies, private membership rosters, and sender-based filters. - - Automatic web based archiving built-in with support for private - and public archives, and hooks for external archivers. + - Automatic web based archiving built-in with support for private and + public archives, and hooks for external archivers. - Per-user configuration optional digest delivery for either MIME-compliant or RFC 1153 style "plain text" digests. @@ -95,85 +89,24 @@ FEATURES REQUIREMENTS - The default mail delivery mechanism uses a direct SMTP connection - to whatever mail transport agent you have running on port 25. You - can thus use Mailman with any such MTA, however with certain MTAs - (e.g. Exim and Postfix), Mailman will support thru-the-web - creation and removal of mailing lists. - - Mailman works with any web server that supports CGI/1.1. The HTML - it generates is quite pedestrian and stingy on the graphics so it - should be friendly to most web browsers and network connections. - It is regularly tested with IE 5.5, Netscape 4.7x, and Mozilla on - Windows and Netscape 4.7x and Mozilla on Linux (and occasionally - Lynx on Linux and Netscape and Mozilla on MacOS too!). - - You will need root access on the machine hosting your Mailman - installation in order to complete some of the configuration - steps. See the INSTALL file for details. - - Mailman's web and email user interface should be compatible with - just about any mail reader or web browser, although a mail reader - that is MIME aware will be a big help. You do not need Java, - JavaScript, or any other fancy plugins. - - -CREATE YOUR FIRST LIST - - These instructions assume that you've installed and configured - Mailman according to the instructions in the INSTALL file. To - create and test your first list, try the following: - - - First, initialize the site administrator's password by cd'ing to - the install directory (by default /usr/local/mailman) and typing + The default mail delivery mechanism uses a direct SMTP connection to + whatever mail transport agent you have running on port 25. You can thus + use Mailman with any such MTA, however with certain MTAs (e.g. Exim and + Postfix), Mailman will support thru-the-web creation and removal of + mailing lists. - % bin/mmsitepass - New site password: [yourpassword] - Again to confirm password: [yourpassword] - Password changed. + Mailman works with any web server that supports CGI/1.1. The HTML it + generates is quite pedestrian and stingy on the graphics so it should be + friendly to most web browsers and network connections. - - Visit the url + You will need root access on the machine hosting your Mailman installation + in order to complete some of the configuration steps. See the INSTALL + file for details. - http://my.dom.ain/mailman/create - - Fill out the form as described in the on-screen instructions, and - in the "List creator's password" field, type the password you - entered above. Type your own email address for the "Initial - list owner address", and select "Yes" to notify the list - administrator. - - - Hit "Create List" - - - Check your email for a message from Mailman informing you that - your new mailing list was created. - - - NOTE: If you are using an MTA other than Exim or Postfix - (e.g. Sendmail or qmail), then you'll need to do the extra step - of installing the mailing list aliases manually. Follow the - instructions in an email message that you should have received - (you'll need to know how to do this for your particular MTA, see - the README for your MTA for more information). - - - Now visit the list's admin page (either by following the link on - the web page or entering the link from the email Mailman just - sent you). Typically the url will be something like - - http://my.dom.ain/mailman/admin/mysitelist - - Type in the list's password and click on "Let me in..." - - - Click on "Membership Management" and then on "Mass Subscription". - - - Enter your email address in the big text field, and click on - "Submit Your Changes" - - - Now go to your email and send a message to yourlist@my.dom.ain. - Within a minute or two you should see your message reflected - back to you via Mailman. - - Congratulations! You've just set up and tested your first Mailman - mailing list. If you had any problems along the way, please see - the section below on FOR MORE INFORMATION. + Mailman's web and email user interface should be compatible with just + about any mail reader or web browser, although a mail reader that is MIME + aware will be a big help. You do not need Java, JavaScript, or any other + fancy plugins. FOR MORE INFORMATION @@ -193,43 +126,47 @@ FOR MORE INFORMATION to help you get going with Mailman. Mailman-Users - An list for users of Mailman, for posting questions or - problems related to installation, use, etc. We'll try to keep - the deep technical discussions off this list. + An list for users of Mailman, for posting questions or problems + related to installation, use, etc. We'll try to keep the deep + technical discussions off this list. http://mail.python.org/mailman/listinfo/mailman-users Listowners This mailing list with a non-technical focus, specifically for - discussions from the perspective of listowners and moderators - who do not have "shell access" to the mailing list server - where the Mailman software runs. + discussions from the perspective of listowners and moderators who do + not have "shell access" to the mailing list server where the Mailman + software runs. http://listowner.org Mailman-Announce - A read-only list for release announcements an other important - news. + A read-only list for release announcements an other important news. http://mail.python.org/mailman/listinfo/mailman-announce Mailman-Developers - A list for those of you interested in helping develop - Mailman's future direction. This list will contain in-depth - technical discussions. + A list for those of you interested in helping develop Mailman 2's + future direction. This list will contain in-depth technical + discussions. http://mail.python.org/mailman/listinfo/mailman-developers + Mailman3-Dev + Get involved now in the development of Mailman 3! + + http://mail.python.org/mailman/listinfo/mailman3-dev + Mailman-I18N A list for the discussion of the Mailman internationalization - effort. Mailman 2.1 will be fully multi-lingual. + effort. Mailman 2.1 is fully multi-lingual. http://mail.python.org/mailman/listinfo/mailman-i18n Mailman-Checkins - A read-only list which is an adjunct to the public anonymous - CVS repository. You can stay on the bleeding edge of Mailman - development by subscribing to this list. + A read-only list which is an adjunct to the public anonymous CVS + repository. You can stay on the bleeding edge of Mailman development + by subscribing to this list. http://mail.python.org/mailman/listinfo/mailman-checkins diff --git a/README.BSD b/README.BSD deleted file mode 100644 index 6a128c3cc..000000000 --- a/README.BSD +++ /dev/null @@ -1,27 +0,0 @@ -Mailman - The GNU Mailing List Management System -Copyright (C) 1998,1999,2000,2001,2002 by the Free Software Foundation, Inc. -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - -BSD ISSUES - -1. Vivek Khera writes that BSD does nightly security scans for setuid - file changes. Setgid directories also come up on the scan when - they change. He says that setgid bit is not necessary on BSD - systems because group ownership is automatically inherited on files - created in directories. On other Un*xes, this only happens when - the directory has the setgid bit turned on. - - To install without turning on the setgid bit on directories, simply - pass in the DIRSETGID variable to make, like so: - - % make DIRSETGID=: install - - This turns off the chmod g+s on each directory as they are - installed. - - - -Local Variables: -mode: text -indent-tabs-mode: nil -End: diff --git a/README.EXIM b/README.EXIM deleted file mode 100644 index 72e3eaa51..000000000 --- a/README.EXIM +++ /dev/null @@ -1,348 +0,0 @@ -Using Exim and Mailman Together -=============================== - -[This is derived from Nigel Metheringham's "HOWTO - Using Exim and - Mailman together", which covers Mailman 2.0.x and Exim 3. It - has been updated to cover Mailman 2.1 and Exim 4. The original - document is here: http://www.exim.org/howto/mailman.html] - - -Mailman configuration ---------------------- - -There is no Mailman configuration needed other than the standard -options detailed in the Mailman install documentation. The Exim -configuration is transparent to Mailman. The user and group settings -for Mailman must match those in the config fragments given below. - - -Exim configuration ------------------- - -The Exim configuration is built so that a list created within Mailman -automatically appears to Exim without the need for defining any -additional aliases. - -The drawback of this configuration is that it will work poorly on -systems supporting lists in several different mail domains. While -Mailman handles virtual domains, it does not yet support having two -distinct lists with the same name in different virtual domains, using -the same Mailman installation. This will eventually change. (But see -below for a variation on this scheme that should accommodate virtual -domains better.) - -The configuration file excerpts below are for use in an already -functional Exim configuration, which accepts mail for the domain in -which the list resides. If this domain is separate from the others -handled by your Exim configuration, then you'll need to: - - * add the list domain, "my.list.domain" to local_domains - - * add a "domains=my.list.domain" option to the director - (router) for the list - - * (optional) exclude that domain from your other directors (routers) - -[Note: the instructions in this document should work with either Exim 3 -or Exim 4. In Exim 3, you must have a 'local_domains' configuration -setting; in Exim 4, you most likely have a 'local_domains' domainlist. -If you don't, you probably know what you're doing and can adjust -accordingly. Similarly, in Exim 4 the concept of "directors" has -disappeared -- there are only routers now. So if you're using Exim 4, -whenever this document says "director", read "router".] - -Whether you are using Exim 3 or Exim 4, you will need to add some macros -to the main section of your Exim config file. You will also need to -define one new transport. With Exim 3, you'll need to add a new -director; with Exim 4, a new router plays the same role. - -Finally, the configuration supplied here should allow co-habiting -Mailman 2.0 and 2.1 installations, with the proviso that you'll probably -want to use "mm21" in place of "mailman" -- e.g., MM21_HOME, -mm21_transport, etc. - - -Main configuration settings -~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -First, you need to add some macros to the top of your Exim config file. -These just make the director (router) and transport below a bit -cleaner. Obviously, you'll need to edit these based on how you -configured and installed Mailman. - - # Home dir for your Mailman installation -- aka Mailman's prefix - # directory. - MAILMAN_HOME=/usr/local/mailman - MAILMAN_WRAP=MAILMAN_HOME/mail/mailman - - # User and group for Mailman, should match your --with-mail-gid - # switch to Mailman's configure script. - MAILMAN_USER=mailman - MAILMAN_GROUP=mailman - - -Transport for Exim 3 -~~~~~~~~~~~~~~~~~~~~ - -Add this to the transports section of your Exim config file, -i.e. somewhere between the first and second "end" line: - - mailman_transport: - driver = pipe - command = MAILMAN_WRAP \ - '${if def:local_part_suffix \ - {${sg{$local_part_suffix}{-(\\w+)(\\+.*)?}{\$1}}} \ - {post}}' \ - $local_part - current_directory = MAILMAN_HOME - home_directory = MAILMAN_HOME - user = MAILMAN_USER - group = MAILMAN_GROUP - - -Director for Exim 3 -~~~~~~~~~~~~~~~~~~~ - -If you're using Exim 3, you'll need to add the following director to -your config file (directors go between the second and third "end" -lines). Also, don't forget that order matters -- e.g. you can make -Mailman lists take precedence over system aliases by putting this -director in front of your aliasfile director, or vice-versa. - - # Handle all addresses related to a list 'foo': the posting address. - # Automatically detects list existence by looking - # for lists/$local_part/config.pck under MAILMAN_HOME. - mailman_director: - driver = smartuser - require_files = MAILMAN_HOME/lists/$local_part/config.pck - suffix_optional - suffix = -bounces : -bounces+* : \ - -confirm+* : -join : -leave : \ - -owner : -request : -admin - transport = mailman_transport - - -Router for Exim 4 -~~~~~~~~~~~~~~~~~ - -In Exim 4, there's no such thing as directors -- you need to add a new -router instead. Also, the canonical order of the configuration file was -changed so routers come before transports, so the router for Exim 4 -comes first here. Put this router somewhere after the "begin routers" -line of your config file, and remember that order matters. - - mailman_router: - driver = accept - require_files = MAILMAN_HOME/lists/$local_part/config.pck - local_part_suffix_optional - local_part_suffix = -bounces : -bounces+* : \ - -confirm+* : -join : -leave : \ - -owner : -request : -admin - transport = mailman_transport - - -Transports for Exim 4 -~~~~~~~~~~~~~~~~~~~~~ - -The transport for Exim 4 is the same as for Exim 3; just copy the -transport given above to somewhere under the "begin transports" line of -your Exim config file. - - -Notes ------ - -Exim should be configured to allow reasonable volume -- e.g. don't set -max_recipients down to a silly value -- and with normal degrees of -security -- specifically, be sure to allow relaying from 127.0.0.1, but -pretty much nothing else. Parallel deliveries and other tweaks can also -be used if you like; experiment with your setup to see what works. -Delay warning messages should be switched off or configured to only -happen for non-list mail, unless you like receiving tons of mail when -some random host is down. - - -Problems --------- - - * Mailman will send as many MAIL FROM/RCPT TO as it needs. It may result - in more than 10 or 100 messages sent in one connection, which will exceed - the default value of Exim's smtp_accept_queue_per_connection - This is bad because it will cause Exim to switch into queue mode and - severely delay delivery of your list messages. - The way to fix this is to set mailman's SMTP_MAX_SESSIONS_PER_CONNECTION - (in ~mailman/Mailman/mm_cfg.py) to a smaller value than Exim's - smtp_accept_queue_per_connection - - * Mailman should ignore Exim delay warning messages, even though - Exim should never send this to list messages. Mailman 2.1's - general bounce detection and VERP support should greatly improve - the bounce detector's hit rates. - - * List existence is determined by the existence of a config.pck file - for a list. If you delete lists by foul means, be aware of this. - - * If you are getting Exim or Mailman complaining about user ids when - you send mail to a list, check that the MAILMAN_USER and - MAILMAN_GROUP match those of Mailman itself (i.e. what were used - in the configure script). Also make sure you do not have aliases - in the main alias file for the list. - - -Receiver Verification ---------------------- - -Exim's receiver verification feature is very useful -- it lets Exim -reject unrouteable addresses at SMTP time. However, this is most useful -for externally-originating mail that is addressed to mail in one of your -local domains. For Mailman list traffic, mail originates on your -server, and is addressed to random external domains that are not under -your control. Furthermore, each message is addressed to many recipients --- up to 500 if you use Mailman's default configuration and don't tweak -SMTP_MAX_RCPTS. - -Doing receiver verification on Mailman list traffic is a recipe for -trouble. In particular, Exim will attempt to route every recipient -addresses in outgoing Mailman list posts. Even though this requires -nothing more than a few DNS lookups for each address, it can still -introduce significant delays. Therefore, you should disable recipient -verification for Mailman traffic. - -Under Exim 3, put this in your main configuration section: - - receiver_verify_hosts = !127.0.0.1 - -Under Exim 4, this is probably already taken care of for you by the -default recipient verification ACL statement (in the "RCPT TO" ACL): - - accept domains = +local_domains - endpass - message = unknown user - verify = recipient - -which only does recipient verification on addresses in your domain. -(That's not exactly the same as doing recipient verification only on -messages coming from non-127.0.0.1 hosts, but it should do the trick for -Mailman.) - - -SMTP Callback -------------- - -Exim's SMTP callback feature is an even more powerful way to detect -bogus sender addresses than normal sender verification. Unfortunately, -lots of servers send bounce messages with a bogus address in the header, -and there are plenty that send bounces with bogus envelope senders -(even though they're supposed to just use an empty envelope sender for -bounces). - -In order to ensure that Mailman can disable/remove bouncing addresses, -you generally want to receive bounces for Mailman lists, even if those -bounces are themselves not bounceable. Thus, you might want to disable -SMTP callback on bounce messages. - -With Exim 4, you can accomplish this using something like the following -in your "RCPT TO" ACL: - - # Accept bounces to lists even if callbacks or other checks would fail - warn message = X-WhitelistedRCPT-nohdrfromcallback: Yes - condition = \ - ${if and {{match{$local_part}{(.*)-bounces\+.*}} - {exists {MAILMAN_HOME/lists/$1/config.pck}}} \ - {yes}{no}} - {yes}{no}} - - accept condition = \ - ${if and {{match{$local_part}{(.*)-bounces\+.*}} - {exists {MAILMAN_HOME/lists/$1/config.pck}}} \ - {yes}{no}} - {yes}{no}} - - # Now, check sender address with SMTP callback. - deny !verify = sender/callout=90s - -If you also do SMTP callbacks on header addresses, you'll want something -like this in your "DATA" ACL: - - deny !condition = $header_X-WhitelistedRCPT-nohdrfromcallback: - !verify = header_sender/callout=90s - - -Doing VERP with Exim and Mailman --------------------------------- - -VERP will send one email, with a separate envelope sender (return path), -for each of your subscribers -- read the information in -~mailman/Mailman/Default.py for the options that start with VERP. In a -nutshell, all you need to do to enable VERP with Exim is to add these -lines to ~mailman/Mailman/mm_cfg.py: - - VERP_PASSWORD_REMINDERS = 1 - VERP_PERSONALIZED_DELIVERIES = 1 - VERP_DELIVERY_INTERVAL = 1 - VERP_CONFIRMATIONS = 1 - -(The director (router) above is smart enough to deal with VERP bounces.) - - -Virtual Domains ---------------- - -One approach to handling virtual domains is to use a separate Mailman -installation for each virtual domain. (Currently, this is the only way -to have lists with the same name in different virtual domains handled by -the same machine.) - -In this case, the MAILMAN_HOME and MAILMAN_WRAP macros are useless -- -you can remove them. Change your director (router) to something like -this: - - require_files = /virtual/${domain}/mailman/lists/${lc:$local_part}/config.pck - -and change your transport like this: - - command = /virtual/${domain}/mailman/mail/mailman \ - ${if def:local_part_suffix \ - {${sg{$local_part_suffix}{-(\\w+)(\\+.*)?}{\$1}}} - {post}} \ - $local_part - current_directory = /virtual/${domain}/mailman - home_directory = /virtual/${domain}/mailman - - -List Verification ------------------ - -This is how a set of address tests for the Exim lists look on a working -system. The list in question is quixote-users@mems-exchange.org, and -these commands were run on the mems-exchange.org mail server ("% " -indicates the Unix shell prompt): - - % exim -bt quixote-users - quixote-users@mems-exchange.org - router = mailman_main_router, transport = mailman_transport - - % exim -bt quixote-users-request - quixote-users-request@mems-exchange.org - router = mailman_router, transport = mailman_transport - - % exim -bt quixote-users-bounces - quixote-users-bounces@mems-exchange.org - router = mailman_router, transport = mailman_transport - - % exim -bt quixote-users-bounces+luser=example.com - quixote-users-bounces+luser=example.com@mems-exchange.org - router = mailman_router, transport = mailman_transport - -If your "exim -bt" output looks something like this, that's a start: at -least it means Exim will pass the right messages to the right Mailman -commands. It by no means guarantees that your Exim/Mailman installation -is functioning perfectly, though! - - -Document History ----------------- - -Originally written by Nigel Metheringham <postmaster@exim.org>. -Updated by Marc Merlin <marc_soft@merlins.org> for Mailman 2.1, Exim 4. -Overhauled/reformatted/clarified/simplified by Greg Ward <gward@python.net>. diff --git a/README.LINUX b/README.LINUX deleted file mode 100644 index 55dfff8bb..000000000 --- a/README.LINUX +++ /dev/null @@ -1,56 +0,0 @@ -Mailman - The GNU Mailing List Management System -Copyright (C) 1998-2003 by the Free Software Foundation, Inc. -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - - -GNU/LINUX ISSUES - - GNU/Linux seems to be the most popular platform on which to run - Mailman. Here are some hints on getting Mailman to run on Linux: - - If you are getting errors with hard link creations and/or you are using - a special secure kernel (securelinux/openwall/grsecurity), see - contrib/README.check_perms_grsecurity. - - Note that if you are using Linux Mandrake in secure mode, you are probably - concerned by this. - - Apparently Mandrake 9.0 changed the permissions on gcc, so if you - build as the mailman user, you need to be sure mailman is in the - cctools group. - - -PYTHON PACKAGES - - Note that if you installed Python from your Linux distribution's - package manager (e.g. .rpms for Redhat-derived systems or .deb for - Debian), you must install the `development' package of Python, or - you may not get everything you need. - - For example, using Python 2.2 on Debian, you will need to install - the python2.2-dev package. On Redhat, you probably need the - python2-devel package. - - If you install Python from source, you should be fine. - - One symptom of this problem, although for unknown reasons, is that - you might get an error such as this during your install: - - Traceback (most recent call last): - File "bin/update", line 44, in ? - import paths - ImportError: No module named paths - make: *** [update] Error 1 - - If this happens, install the Python development package and try - "configure ; make install" again. - - This problem can manifest itself in other Linux distributions in - different ways, although usually it appears as ImportErrors. - - - -Local Variables: -mode: text -indent-tabs-mode: nil -End: diff --git a/README.MACOSX b/README.MACOSX deleted file mode 100644 index f78598899..000000000 --- a/README.MACOSX +++ /dev/null @@ -1,31 +0,0 @@ -Mailman - The GNU Mailing List Management System -Copyright (C) 2002 by the Free Software Foundation, Inc. -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - - -MacOSX ISSUES - - Mailman should run on MacOSX, although I have not personally had - time to try it yet. Here are some pointers we've collected on - getting Mailman to run on MacOSX. - - - Jaguar (MacOSX 10.2) comes with Python 2.2. While this isn't - the very latest stable version of Python, it ought to be - sufficient to run Mailman 2.1. - - - David B. O'Donnell has a web page describing his configuration - of Mailman 2.0.13 and Postfix on MacOSX Server. - - http://www.afp548.com/Articles/mail/python-mailman.html - - - Kathleen Webb posted her experiences in getting Mailman running - on Jaguar using Sendmail. - - http://mail.python.org/pipermail/mailman-users/2002-October/022947.html - - - -Local Variables: -mode: text -indent-tabs-mode: nil -End: diff --git a/README.POSTFIX b/README.POSTFIX deleted file mode 100644 index e4f184c0e..000000000 --- a/README.POSTFIX +++ /dev/null @@ -1,223 +0,0 @@ -Mailman - The GNU Mailing List Management System -Copyright (C) 2001-2003 by the Free Software Foundation, Inc. -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - - -GENERAL SETUP INFORMATION - - Mailman should work pretty much out of the box with a standard - Postfix installation. As of this writing I've tested it with - Postfix 19991231 up to pl13, 200010228 up to pl08, and up to - Postfix 2.0.15. - - By default, Postfix treats -owner and -request addresses - specially. Since we want Postfix to deliver such messages to - Mailman, you should turn off this option by adding this to your - main.cf file: - - owner_request_special = no - - In order to support Mailman's optional VERP delivery, you will - want to disable luser_relay (the default) and you will want to set - recipient_delimiter for extended address semantics. You should - comment out any luser_relay value in your main.cf and just go with - the defaults. Also, add this to your main.cf file: - - recipient_delimiter = + - - Using + as the delimiter works well with the default values for - VERP_FORMAT and VERP_REGEXP in Defaults.py. - - When attempting to deliver a message to a non-existent local - address, Postfix may return a 450 error code. Since this is a - non-transient error code, Mailman will continue to attempt to - delivery the message for DELIVERY_RETRY_PERIOD (5 days by - default). You might want to set Postfix up so that it returns - permanent error codes for non-existent local users by adding the - following to your main.cf file: - - unknown_local_recipient_reject_code = 550 - - Finally, if you are using Postfix-style virtual domains, read the - section on virtual domain support below. - - -INTEGRATING POSTFIX AND MAILMAN - - You can integrate Postfix and Mailman such that when new lists are - created, or lists are removed, Postfix's alias database will be - automatically updated. The following are the steps you need to - take to make this work. - - In the description below, we assume that you've installed Mailman - in the default location, i.e. /usr/local/mailman. If that's not - the case, adjust the instructions according to your use of - configure's --prefix and --with-var-prefix options. - - - If you are using virtual domains and you want Mailman to honor - your virtual domains, read the section below first! - - - Add this to the bottom of the $prefix/Mailman/mm_cfg.py file: - - MTA = 'Postfix' - - The MTA variable names a module in Mailman/MTA which contains the - MTA-specific functions to be executed when a list is created or - removed. - - - Look at the Defaults.py file for the variables POSTFIX_ALIAS_CMD - and POSTFIX_MAP_CMD command. Make sure these point to your - postalias and postmap programs respectively. Remember that if - you need to make changes, do it in mm_cfg.py. - - - Run the genaliases script to initialize your aliases file. - - % cd /usr/local/mailman - % bin/genaliases - - Make sure that the owner of the data/aliases and data/aliases.db - file is `mailman' and that the group owner for those files is - `mailman'. E.g.: - - % su - % chown mailman:mailman data/aliases* - - - Hack your Postfix's main.cf file to include the following path - in your alias_maps variable: - - /usr/local/mailman/data/aliases - - (no trailing .db). Do not include this in your alias_database - variable. This is because you do not want Postfix's newaliases - command to modify Mailman's aliases.db file, but you do want - Postfix to consult aliases.db when looking for local addresses. - - You probably want to use a hash: style database for this entry. - Here's an example: - - alias_maps = hash:/etc/postfix/aliases, - hash:/usr/local/mailman/data/aliases - - - When you configure Mailman, use the --with-mail-gid=mailman - switch (actually, this will be the default if you configured - Mailman after adding the `mailman' owner). Because the owner of - the aliases.db file is `mailman', Postfix will execute Mailman's - wrapper program as uid and gid mailman. - - That's it! One caveat: when you add or remove a list, the - aliases.db file will updated, but it will not automatically run - "postfix reload". This is because you need to be root to run this - and suid-root scripts are not secure. The only effect of this is - that it will take about a minute for Postfix to notice the change - to the aliases.db file and update its tables. I consider this a - minor inconvenience. - - -VIRTUAL DOMAINS - - Postfix 2.0 supports "virtual alias domains", essentially what - used to be called Postfix-style virtual domains in earlier Postfix - versions. To make virtual alias domains work with Mailman, you - need to do some setup in both Postfix and Mailman. Mailman will - write all virtual alias mappings to a file called, by default, - /usr/local/mailman/data/virtual-mailman. It will also use postmap - to create the virtual-mailman.db file that Postfix will actually - use. - - First, you need to set up the Postfix virtual alias domains as - described in the Postfix documentation (see Postfix's virtual(5) - manpage). Note that it's your responsibility to include the - "virtual-alias.domain anything" line as described manpage; Mailman - will not include this line in virtual-mailman. I highly encourage - you to make sure your virtual alias domains are working properly - before integrating with Mailman. - - Next, add a path to Postfix's virtual_alias_maps variable, - pointing to the virtual-mailman file, e.g.: - - virtual_alias_maps = <your normal virtual alias files>, - hash:/usr/local/mailman/data/virtual-mailman - - assuming you've installed Mailman in the default location. If - you're using an older version of Postfix which doesn't have the - virtual_alias_maps variable, use the virtual_maps variable - instead. - - Next, in your mm_cfg.py file, you will want to set the variable - POSTFIX_STYLE_VIRTUAL_DOMAINS to the list of virtual domains that - Mailman should update. This may not be all of the virtual alias - domains that your Postfix installation supports! The values in - this list will be matched against the host_name attribute of - mailing lists objects, and must be an exact match. - - Here's an example: - - Let's say I've set up Postfix to handle the virtual domains - dom1.ain, dom2.ain, and dom3.ain. Let's say further that in - main.cf you've got the following settings: - - myhostname = mail.dom1.ain - mydomain = dom1.ain - mydestination = $myhostname, localhost.$mydomain - virtual_alias_maps = - hash:/some/path/to/virtual-dom1, - hash:/some/path/to/virtual-dom2, - hash:/some/path/to/virtual-dom2 - - Let's say further that in virtual-dom1, you've got the following - lines: - - dom1.ain IGNORE - @dom1.ain @mail.dom1.ain - - This tells Postfix to deliver anything addressed to dom1.ain to - the same mailbox at mail.dom1.com, its default destination. - - In this case you would not include dom1.ain in - POSTFIX_STYLE_VIRTUAL_DOMAINS because otherwise Mailman will write - entries for mailing lists in the dom1.ain domain as - - mylist@dom1.ain mylist - mylist-request@dom1.ain mylist-request - # and so on... - - The more specific entries trump your more general entries, thus - breaking the delivery of any dom1.ain mailing list. - - However, you would include dom2.ain and dom3.ain in mm_cfg.py: - - POSTFIX_STYLE_VIRTUAL_DOMAINS = ['dom2.ain', 'dom3.ain'] - - Now, any list that Mailman creates in either of those two domains, - will have the correct entries written to - /usr/local/mailman/data/virtual-mailman - - As above with the data/aliases* files, you want to make sure that - both data/virtual-mailman and data/virtual-mailman.db are user and - group owned by the `mailman' user/group. So to get things - started, set up your virtual domains, run bin/genaliases, and - check the ownerships of the files. From here on out, you should - be good to go. - - -AN ALTERNATIVE APPROACH - - Fil <fil@rezo.net> has an alternative approach based on virtual - maps and regular expressions, as described at: - - (French) http://listes.rezo.net/comment.php - (English) http://listes.rezo.net/how.php - - This is a good (and simpler) alternative if you don't mind - exposing an additional hostname in the domain part of the - addresses people will use to contact your list. I.e. if people - should use mylist@lists.dom.ain instead of mylist@dom.ain. - - I have not extensively tested this approach however. - - - -Local Variables: -mode: text -indent-tabs-mode: nil -End: diff --git a/README.QMAIL b/README.QMAIL deleted file mode 100644 index 72ab96e31..000000000 --- a/README.QMAIL +++ /dev/null @@ -1,186 +0,0 @@ -Mailman - The GNU Mailing List Management System -Copyright (C) 1998,1999,2000,2001,2002 by the Free Software Foundation, Inc. -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - -QMAIL ISSUES - -There are some issues that users of the qmail mail transport agent -have encountered. None of the core maintainers use qmail, so all of -this information has been contributed by the Mailman user community, -especially Martin Preishuber and Christian Tismer, with notes by -Balazs Nagy (BN) and Norbert Bollow (NB). - -- You might need to set the mail-gid user to either "qmail", "mailman", or - "nofiles" by using the --with-mail-gid configure option. - - BN: it highly depends on your mail storing policy. For example if - you use the simple ~alias/.qmail-* files, you can use `id -g alias`. - But if you use /var/qmail/users, the specified mail gid can be - used. - - If you are going to be directing virtual domains directly to the - "mailman" user (using "virtualdomains" on a list-only domain, for - example), you will have to use --with-mail-gid=<gid of mailman user's group> - This is incompatible with having list aliases in ~alias, unless that alias - simply forwards to "mailman-listname*". - -- If there is a user `mailman' on your system, the alias - `mailman-owner' will work only in ~mailman. You have to do a "touch - .qmail-owner" in ~mailman directory to create this alias. - - NB: An alternative, IMHO better solution is to `chown root - ~mailman', that will stop qmail from considering `mailman' to be a - user to whom mail can be delivered. (See `man 8 qmail-getpw'.) - -- In a related issue, if you have any users with the same name as one - of your mailing lists, you will have problems if list names contain - `-' in them. Putting .qmail redirections into the user's home - directory doesn't work because the Mailman wrappers will not get - spawned with the proper GID. The solution is to put the following - lines in the /var/qmail/users/assign file: - - +zope-:alias:112:11:/var/qmail/alias:-:zope-: - . - - where in this case the listname is e.g. zope-users. - - NB: Alternatively, you could host the lists on a virtual domain, and - use the /var/qmail/control/virtualdomains file to put the mailman - user in charge of this virtual domain. - -- BN: If inbound messages are delivered by another user than mailman, - it's necessary to allow it to access ~mailman. Be sure that - ~mailman has group writing access and setgid bit is set. Then put - the delivering user to mailman group, and you can deny access to - ~mailman to others. Be sure that you can do the same with the WWW - service. - - By the way the best thing is to make a virtual mail server to handle - all of the mail. NB: E.g. make an additional "A" DNS record for the - virtual mailserver pointing to your IP address, add the line - `lists.kva.hu:mailman' to /var/qmail/control/virtualdomains and a - `lists.kva.hu' line to /var/qmail/control/rcpthosts file. Don't - forget to HUP the qmail-send after modifying "virtualdomains". Then - every mail to lists.kva.hu will arrive to mail.kva.hu's mailman - user. - - Then make your aliases: - .qmail => mailman@...'s letters - .qmail-owner => mailman-owner's letters - - - For list aliases, you can either create them manually: - .qmail-list => posts to the 'list' list - .qmail-list-admin => posts to the 'list's owner - .qmail-list-request => requests to 'list' - etc - - or for automatic list alias handling (when using the lists.kva.hu virtual - as above), see "contrib/qmail-to-mailman.py" in the Mailman distribution. - Modify the "~mailman/.qmail-default" to include: - - |/path/to/python /path/to/qmail-to-mailman.py - - and new lists will automatically be picked up. - -- You have to make sure that the localhost can relay. If you start - qmail via inetd and tcpenv, you need some line the following in your - /etc/hosts.allow file: - - tcp-env: 127. 10.205.200 : setenv RELAYCLIENT - - where 10.205.200. is your IP address block. If you use tcpserver, then you - need something like the following in your /etc/tcp.smtp file: - - 10.205.200.:allow,RELAYCLIENT="" - 127.:allow,RELAYCLIENT="" - -- BN: Bigger /var/qmail/control/concurrencyremote values work better - sending outbound messages, within reason. Unless you know your system - can handle it (many if not most cannot) this should not be set to a value - greater than 120. - -- More information about setting up qmail and relaying can be found in - the qmail documentation. - -BN: Last but not least, here's a little script to generate aliases to -your lists (if for some reason you can/will not have them -automatically picked up using "contrib/qmail-to-mailman.py"): - -This script is for the Mailman 2.0 series: -#!/bin/sh -if [ $# = 1 ]; then - i=$1 - echo Making links to $i in the current directory... - echo "|preline /home/mailman/mail/mailman post $i" > .qmail-$i - echo "|preline /home/mailman/mail/mailman mailowner $i" > .qmail-$i-admin - echo "|preline /home/mailman/mail/mailman mailowner $i" > .qmail-$i-owner - echo "|preline /home/mailman/mail/mailman mailowner $i" > .qmail-owner-$i - echo "|preline /home/mailman/mail/mailman mailcmd $i" > .qmail-$i-request -fi - -This script is for the Mailman 2.1 series: -Note: this is for a new Mailman 2.1 installation. Users upgrading from - Mailman 2.0 would most likely change /usr/local/mailman to - /home/mailman. If in doubt, refer to the --prefix option passed to - configure during compile time. - -#!/bin/sh -if [ $# = 1 ]; then - i=$1 - echo Making links to $i in the current directory... - echo "|preline /usr/local/mailman/mail/mailman post $i" > .qmail-$i - echo "|preline /usr/local/mailman/mail/mailman admin $i" > .qmail-$i-admin - echo "|preline /usr/local/mailman/mail/mailman bounces $i" > .qmail-$i-bounces - # The following line is for VERP - # echo "|preline /usr/local/mailman/mail/mailman bounces $i" > .qmail-$i-bounces-default - echo "|preline /usr/local/mailman/mail/mailman confirm $i" > .qmail-$i-confirm - echo "|preline /usr/local/mailman/mail/mailman join $i" > .qmail-$i-join - echo "|preline /usr/local/mailman/mail/mailman leave $i" > .qmail-$i-leave - echo "|preline /usr/local/mailman/mail/mailman owner $i" > .qmail-$i-owner - echo "|preline /usr/local/mailman/mail/mailman request $i" > .qmail-$i-request - echo "|preline /usr/local/mailman/mail/mailman subscribe $i" > .qmail-$i-subscribe - echo "|preline /usr/local/mailman/mail/mailman unsubscribe $i" > .qmail-$i-unsubscribe -fi - -INFORMATION ON VERP - -You will note in the alias generating script for 2.1 above, there is a -line for VERP that has been commented out. If you are interested in VERP -there are two options. The first option is to allow Mailman to do the -VERP formatting. To activate this, uncomment that line and add the -following lines to your mm_cfg.py file: - -VERP_FORMAT = '%(bounces)s-+%(mailbox)s=%(host)s' -VERP_REGEXP = r'^(?P<bounces>.*?)-\+(?P<mailbox>[^=]+)=(?P<host>[^@]+)@.*$' - -The second option is a patch on SourceForge located at: - -http://sourceforge.net/tracker/?func=detail&atid=300103&aid=645513&group_id=103 - -This patch currently needs more testing and might best be suitable for -developers or people well familiar with qmail. Having said that, this -patch is the more qmail-friendly approach resulting in large performance -gains. - -VIRTUAL MAIL SERVER - -As mentioned in the ISSUES area for a virtual mail server, a patch under -testing is located at: - -http://sf.net/tracker/index.php?func=detail&aid=621257&group_id=103&atid=300103 - -Again, this patch is for people familiar with their qmail installation. - -MORE INFORMATION - -You might be interested in some information on modifying footers that -Norbert Bollow has written about Mailman and qmail, available here: - - http://mailman.cis.to/qmail-verh/ - - -Local Variables: -mode: text -indent-tabs-mode: nil -End: diff --git a/README.SENDMAIL b/README.SENDMAIL deleted file mode 100644 index 6edef10cc..000000000 --- a/README.SENDMAIL +++ /dev/null @@ -1,73 +0,0 @@ -Mailman - The GNU Mailing List Management System -Copyright (C) 1998,1999,2000,2001,2002 by the Free Software Foundation, Inc. -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - -SECURITY NOTE - - You may be tempted to set the DELIVERY_MODULE configuration - variable in mm_cfg.py to `Sendmail' when using the Sendmail MTA. - Don't. The Sendmail.py module is misnamed -- it's really a - command line based message handoff scheme as opposed to the SMTP - scheme used in SMTPDirect (the default). Sendmail.py has known - security holes and is provided as a proof-of-concept only. If you - are having problems using SMTPDirect.py please fix those instead - of using Sendmail.py, or you may open your system up to security - exploits. - - -SENDMAIL `smrsh' COMPATIBILITY - - Many newer versions of Sendmail come with a restricted execution - utility called "smrsh", which limits the executables that Sendmail - will allow to be used as mail filter programs. You need to - explicitly allow Mailman's wrapper program to be used with smrsh - before it will work. If mail is not getting delivered to - Mailman's wrapper program and you're getting an "operating system - error" in your mail syslog, this could be your problem. - - One good way of doing this is to: - - - cd into /etc/smrsh (or where ever it happens to reside on - your system, such as /var/smrsh or /usr/local/smrsh). - - - create a symbolic link to Mailman's wrapper program - - For example, if you've installed Mailman in the standard location, - you can just execute these commands (you might have to do these as - root): - - % cd /etc/smrsh - % ln -s /usr/local/mailman/mail/mailman mailman - - -INTEGRATING SENDMAIL AND MAILMAN - - David Champion has contributed a recipe for more closely - integrating Sendmail and Mailman, such that Sendmail will - automatically recognize and deliver to new mailing lists as they - are created, without having to manually edit alias tables. - - In the contrib directory, you will find four files - - mm-handler.readme - an explanation of how to set everything up - mm-handler - the mail delivery agent (MDA) - mailman.mc - a toy configuration file sample - virtusertable - a sample for RFC 2142 address exceptions - - -PERFORMANCE NOTES - - One of the surest performance killers for Sendmail users is when - Sendmail is configured to synchronously verify the recipient's - host via DNS. If it does this for messages posted to it from - Mailman, you will get horrible performance. Since Mailman usually - connects via localhost (i.e. 127.0.0.1) to the SMTP port of - Sendmail, you should be sure to configure Sendmail /not/ to do DNS - verification synchronously for localhost connections. - - - -Local Variables: -mode: text -indent-tabs-mode: nil -End: diff --git a/STYLEGUIDE.txt b/STYLEGUIDE.txt index 2063f9ea1..6fa25aa92 100644 --- a/STYLEGUIDE.txt +++ b/STYLEGUIDE.txt @@ -1,23 +1,24 @@ -Python coding style guide for GNU Mailman -Copyright (C) 2002-2003 Python Software Foundation, Barry A. Warsaw +Python coding style guide for Mailman +Copyright (C) 2002-2004 Barry A. Warsaw +$Revision: 7464 $ -This document contains a style guide for Python programming, as used -in GNU Mailman. In general, Guido van Rossum's style guide should be -taken as a basis, as embodied in PEP 8: +NOTE: The canonical version of this style guide can be found at: - http://python.sourceforge.net/peps/pep-0008.html + http://barry.warsaw.us/software/STYLEGUIDE.txt -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. For software -like the email package, which is both standalone and distributed in -Python's standard library, please adhere to the established style, -which means please use my style. +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: -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 Guido's: + 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 Guido's: - Imports usually should be on separate lines. While it's sometimes okay to say @@ -32,44 +33,42 @@ depart from Guido's: - Imports are always put at the top of the file, just after any module comments and docstrings, and before module globals and constants. - Imports should be grouped, with the order being + Imports should be grouped, with the order being: 1. standard library imports 2. related major package imports (i.e. all email package imports next) 3. application specific imports - Dotted imports should follow non-dotted imports. Non-dotted imports - should be grouped by increasing length, while dotted imports should - be grouped roughly alphabetically. + 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 roughly 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 (i.e. use a single leading - underscore). +- 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 + (i.e. use a single leading underscore). - Always give the class and the module the same name. + Always give the class and the module the same name, differing only by case + as PEP 8 recommends. E.g. - Note though that Zope3's module naming style has a lot of merit. - Here, package and module names are all lower cased. I'm - experimenting with this approach for Mailman3. + 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 + 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 + import myclass + import foo.bar.yourclass - and use "MyClass.MyClass" + and use "myclass.MyClass" -- Right hanging comments are discouraged, in favor of preceding - comments. E.g. +- Right hanging comments are discouraged, in favor of preceding comments. + E.g. foo = blarzigop(bar) # if you don't blarzigop it, it'll shlorp @@ -82,43 +81,39 @@ depart from Guido's: 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. + 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. -- Also put to blank lines between any module level function. Put only - one blank line between methods in a class. No blank lines between - the class definition and the first method in the class (although - class docstrings often go in this space). +- Put to blank lines between any module level function. Put only one blank + line between methods in a class. No blank lines between the class + definition and the first method in the class (although class docstrings + often go in this space). -- 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. +- 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. +- 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 - """ + - surprise + - deception + - an almost fanatical devotion to the pope + """ -- Write docstrings for all public modules, functions, classes, and - methods. Docstrings are not necessary and usually discouraged for - non-public methods, but you should have a comment that describes - what the method does. This comment should appear after the "def" - line. +- Write docstrings for all public modules, functions, classes, and methods. + Docstrings are not necessary and usually discouraged for non-public methods, + but you should have a comment that describes what the method does. This + comment should appear after the "def" line. -- 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.: +- 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 @@ -132,34 +127,36 @@ depart from Guido's: - fill-column for docstrings should be 78. -- Always use string methods instead of string module functions, unless - your code must work with Python 1.5.2 (but let's hope not). +- Always use string methods instead of string module functions. -- For sequences, (strings, lists, tuples), use the fact that empty - sequences are false, so "if not seq" or "if seq" is preferable to - "if len(seq)" or "if not len(seq)". Unless you must be compatible - with Pythons before 2.2.1, always use True and False instead of 1 - and 0 for boolean values. +- For sequences, (strings, lists, tuples), use the fact that empty sequences + are false, so "if not seq" or "if seq" is preferable to "if len(seq)" or "if + not len(seq)". Always use True and False instead of 1 and 0 for boolean + values. -- Always decide whether a class's methods and instance variables - should be public or non-public. In general, never make data - variables public unless you're implementing essentially a record. - It's almost always preferable to give a functional interface to - your class instead (Python 2.2's descriptors and properties make - this much nicer). +- Always decide whether a class's methods and instance variables should be + public or non-public. In general, never make data variables public unless + you're implementing essentially a record. It's almost always preferable to + give a functional interface to your class instead (Python 2.2's descriptors + and properties make this much nicer). Also decide whether your attributes should be private or not. The - difference between private and non-public is that the former will - never be useful for a derived class, while the latter might be. - Yes, you should design your classes with inheritance in mind! + difference between private and non-public is that the former will never be + useful for a derived class, while the latter might be. Yes, you should + design your classes with inheritance in mind! + +- 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. - Private attributes should have two leading underscores, no trailing - underscores. + 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. - Non-public attributes should have a single leading underscore, no - trailing underscores. - 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: @@ -1,63 +1,82 @@ Mailman - The GNU Mailing List Management System -Copyright (C) 1998-2003 by the Free Software Foundation, Inc. +Copyright (C) 1998-2004 by the Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA -A NOTE ABOUT MODERATION +UPGRADING FROM PREVIOUS VERSIONS - When you upgrade from Mailman 2.0.x to Mailman 2.1, you should - double check that your moderation and privacy options are still - set the way you want them. The Mailman options dealing with - moderation and privacy have changed significantly, to make them - easier to understand and control. Ever effort was taken to - translate the old configuration variables to the new configuration - variables, but because the old semantics were so complex, it is - possible your settings may not have been correctly translated. - - Check especially the values for (in Privacy -> Sender Filters) - default_member_moderation, generic_nonmember_action, and - accept_these_nonmembers. Check also the moderation flag on member - accounts in the Membership Management screen. + For the most part, upgrading Mailman entails installing the latest version + over the existing version. Usually, you can unpack the new release, run + 'configure' with the same options you used in your previous install, and + then do a 'make install'. However, there are some changes that may need + to be taken care of manually. + What you need to do depends on the version you are using and the version + you are upgrading to. In all cases, you should first turn off your mail + and web access to your Mailman installation. You're essentially upgrading + a database, and it's usually a good idea to make sure the database cannot + be modified in the middle of the upgrade. -UPGRADING FROM PREVIOUS VERSIONS + My recommendations are: - For the most part, upgrading Mailman is as easy as just installing - the latest version over the existing version. However, there are - some changes that need to be taken care of manually. + - Turn off your incoming mail daemon. Most remote smtp servers will + simply queue up messages destined for your domain if port 25 is shut + off. - What you need to do depends on the version you are using and the - version you are upgrading to. In all cases, you should first turn - off your mail and web access to your Mailman installation. You're - essentially upgrading a database, and it's usually a good idea to - make sure the database cannot be modified in the middle of the - upgrade. + - Temporarily disable web access to Mailman. You can do this by either + turning off your web server temporarily, or by setting up a temporary + redirect to a "service unavailable" page for the Mailman URLs. Refer to + your web server documentation for details. - My recommendations are - - Turn off your incoming mail daemon. Most remote smtp servers - will simply queue up messages destined for your domain if port - 25 is shut off. +UPGRADING FROM 2.1.4 to 2.1.5 - - Temporarily disable web access to Mailman. You can do this by - either turning off your web server temporarily, or by setting up - a temporary redirect to a "service unavailable" page for the - Mailman URLs. Refer to your web server documentation for - details. + In Mailman 2.1.5, some significant changes have been made to the file + formats for qfiles and the pendings database. All care has been taken to + make sure the upgrades happen automatically and smoothly, but you should + double check and, for the ultra-paranoid, make backups of your Mailman + site before you upgrade. BE SURE TO TURN OFF MAILMAN AS DESCRIBED ABOVE + BEFORE YOU UPGRADE. - Mailman will NOT upgrade the template files for existing lists. - Chuq Von Rospach gives some useful advice in this message to the - users mailing list: + Specifically, in MM2.1.4 every message in the queues were represented by + two files, a .msg or .pck file containing the email message, and a .db + file containing metadata about the message. In MM2.1.5 this has been made + more efficient by using only one file (with a .pck extension) for both the + message and metadata. This should make MM2.1.5 half as hostile to the + file system. - http://mail.python.org/pipermail/mailman-users/2000-September/006826.html + The bin/upgrade script, which is run automatically when you upgrade, + should convert all the old style qfiles to the new style qfiles. Note + that this could take a long time if you have a lot of files in your qfiles + subdirectories. Pay particular attention to files you might have in + qfiles/shunt; these will get upgraded too, although files in qfiles/bad + will not. - [Actually, the upgrade to MM2.1a2 /will/ shuffle template files, - deleting any that it detects are unchanged from the original - defaults (calculated via md5 checksums).] + In MM2.1.4, the database file containing pending actions (i.e + subscriptions, unsubscriptions, message holds, etc.) was shared globally + among all mailing lists. In MM2.1.5, each list now has its own pending + database file. All care has been taken to properly split pending actions + from the global to the list-specific files, but it's possible there are + bugs here. Best practice is to clear all pending actions before you + upgrade, although this is not always possible. UPGRADING FROM 2.0.x to 2.1 + When you upgrade from Mailman 2.0.x to Mailman 2.1, you should double + check that your moderation and privacy options are still set the way you + want them. The Mailman options dealing with moderation and privacy have + changed significantly, to make them easier to understand and control. + Ever effort was taken to translate the old configuration variables to the + new configuration variables, but because the old semantics were so + complex, it is possible your settings may not have been correctly + translated. + + Check especially the values for (in Privacy -> Sender Filters) + default_member_moderation, generic_nonmember_action, and + accept_these_nonmembers. Check also the moderation flag on member + accounts in the Membership Management screen. + In Mailman 2.1, the qrunner subsystem has been completely rewritten. You no longer start qrunner from cron! Instead, there is a bin/mailmanctl script which is used to start, stop, and |
