| EZFAQ 0.40 - ezmlm-idx and ezmlm FAQ | |
| Fred Lindberg, lindberg@id.wustl.edu, Fred B. Ringel, | |
| fredr@rivertown.net, & Bruce Guenter bruce@untroubled.org | |
| 2006-11-24 | |
| This document is a collection of frequently asked questions about | |
| ezmlm-idx. Where applicable, ezmlm itself is also covered. This FAQ | |
| presumes familiarity with Unix, and with the basic concepts of E-mail | |
| and mailing lists. This FAQ is updated for ezmlm-0.53 and ezmlm- | |
| idx-0.40. | |
| ______________________________________________________________________ | |
| Table of Contents | |
| 1. General Information | |
| 1.1 Acknowledgements | |
| 1.2 What is this document? | |
| 1.3 Terminology | |
| 1.4 What is the difference between ezmlm and ezmlm-idx? | |
| 1.5 Where can I get all of the ezmlm-related programs? | |
| 1.6 Where can I find documentation for ezmlm and patches? | |
| 1.7 Where do I send comments on this document? | |
| 1.8 How to experiment with new versions of ezmlm-idx. | |
| 2. Quick start | |
| 3. Overview of mailing list management and mailing list managers | |
| 4. Overview of ezmlm function | |
| 4.1 The basic setup. | |
| 4.2 Inventions in ezmlm. | |
| 4.3 The qmail delivery mechanism. | |
| 4.4 What the different programs do. | |
| 4.5 What the different files in the list directory do. | |
| 4.6 The paper path for posts. | |
| 4.7 The ezmlm path for moderation messages. | |
| 4.8 The ezmlm path for administrative messages. | |
| 4.9 The ezmlm path for bounces. | |
| 4.10 Messages to list-owner and list-digest-owner. | |
| 4.11 Structure of subscriber databases. | |
| 4.12 Local case in E-mail addresses. | |
| 4.13 Testing SENDER to allow posts only from list subscribers. | |
| 4.14 How cookies work. | |
| 4.15 How moderator E-mail addresses are stored. | |
| 4.16 How subscription moderation works. | |
| 4.17 How remote administration works. | |
| 4.18 How message moderation works. | |
| 4.19 How QMQP support works | |
| 4.20 How messages are stored in the archive. | |
| 4.21 How the message index works. | |
| 4.22 How threading works. | |
| 4.23 How digests work. | |
| 4.24 How WWW archive access works. | |
| 4.25 How ezmlm-tstdig works. | |
| 4.26 How sublists work. | |
| 4.27 How sublisting can be made transparent to the user. | |
| 4.28 How to service commands in the subject line. | |
| 4.29 How to support alternative command names. | |
| 4.30 How to add your own commands. | |
| 4.31 How remote administrators can retrieve a subscriber list | |
| 4.32 How remote administrators can determine the number of subscribers | |
| 4.33 How remote admins can see if an address is a subscriber or not | |
| 4.34 How remote administrators can search the subscription log | |
| 4.35 How text file editing works. | |
| 4.36 How subject line prefixes work. | |
| 4.37 How bounces are handled. | |
| 4.38 How the info and faq commands work. | |
| 4.39 How the global ezmlm list address works. | |
| 4.40 How ezmlm-cron works. | |
| 4.41 How ezmlm-make works. | |
| 4.42 What names can I use for my lists? | |
| 4.43 Lists in virtual domains | |
| 4.44 How do I make customization simple for me/my users? | |
| 5. ezmlm support for SQL databases. | |
| 5.1 Why use an SQL database with ezmlm? | |
| 5.2 Why not to use an SQL database with ezmlm. | |
| 5.3 Tables used for (My)SQL support. | |
| 5.3.1 Address tables. | |
| 5.3.2 Subscriber log tables. | |
| 5.3.3 Message logging tables. | |
| 5.4 How to set up a simple list with SQL support. | |
| 5.4.1 Helper programs for SQL-enabled lists. | |
| 5.5 Manually manipulating the subscribers of a SQL-enabled list. | |
| 5.6 Converting to and from and SQL database. | |
| 5.7 Optimizing MySQL for ezmlm. | |
| 5.7.1 Address SELECTs, additions, removals. | |
| 5.8 Maintenance of the MySQL database. | |
| 6. Possible error conditions in ezmlm lists. | |
| 6.1 What do I do if ezmlm doesn't work? | |
| 6.2 How do I report ezmlm bugs? | |
| 6.3 Where do I send suggestions for ezmlm-idx improvements? | |
| 6.4 Using ezmlm-test to check the ezmlm(-idx) programs. | |
| 6.5 Using ezmlm-check to find setup errors. | |
| 6.6 Posts are rejected: Sorry, no mailbox here by that name (#5.1.1). | |
| 6.7 Post are not sent to subscribers. | |
| 6.8 ezmlm-make fails: usage: ezmlm-make ... | |
| 6.9 ezmlm-make fails: Unable to create ... | |
| 6.10 ezmlm-make fails: ... ezmlmrc does not exist | |
| 6.11 Index/get/thread requests fail quietly or with errors from ezmlm-manage. | |
| 6.12 Digest triggering requests fail. | |
| 6.13 Remote administration (un)subscribe confirm requests go to the user, not the moderator. | |
| 6.14 (Un)subscribers does not receive a (un)subscribe acknowledgement | |
| 6.15 Messages posted to a moderated list are sent out without moderation. | |
| 6.16 Messages posted to a moderated list do not result in moderation requests. | |
| 6.17 Moderation request replies do not result in the appropriate action. | |
| 6.18 Moderator comments with moderation request replies are not added to the post/sent to the poster. | |
| 6.19 Some headers are missing from messages in the digest. | |
| 6.20 Some Received: headers are missing from messages. | |
| 6.21 My Mutt users cannot thread their digest messages. | |
| 6.22 Posts fail: Message already has Mailing-List (#5.7.2). | |
| 6.23 The last line of a | |
| 6.24 No CONFIRM requests are sent to moderators. | |
| 6.25 Deliveries fail ``temporary qmail-queue error'' | |
| 6.26 How to deal with corrupted subscriber lists | |
| 6.27 Vacation program replies are treated as bounces by ezmlm. | |
| 6.28 Digests do not come at regular hours. | |
| 6.29 Preventing loops from misconfigured subscriber addresses. | |
| 6.30 A user can subscribe and receives warning and probe messages, but no messages from the list. | |
| 7. Customizing ezmlm-make operation via ezmlmrc | |
| 7.1 Using ezmlm-make to edit existing lists. | |
| 7.2 What is ezmlmrc? | |
| 7.3 Changing defaults for | |
| 7.4 Changing default moderator directories. | |
| 7.5 Adapting ezmlm-make for virtual domains. | |
| 7.6 Setting up ezmlm-make for special situations. | |
| 8. Restricting message posting to the list. | |
| 8.1 Requiring the list address in To:/Cc: headers. | |
| 8.2 Rejecting messages sent from other mailing lists. | |
| 8.3 Restricting posts based on the Subject line. | |
| 8.4 Restricting the size of posts. | |
| 8.5 Restricting posts based on MIME content-type. | |
| 8.6 Restricting posts to list subscribers. | |
| 8.7 Restricting posts to an arbitrary set of E-mail addresses (higher security option). | |
| 8.8 Completely restricting posts. | |
| 8.9 A general solution to restricting posts based on SENDER. | |
| 9. Customizing outgoing messages. | |
| 9.1 Adding a trailer to outgoing messages. | |
| 9.2 Adding a subject prefix to outgoing messages. | |
| 9.3 Adding a header to outgoing messages. | |
| 9.4 Adding a message number header. | |
| 9.5 Removing headers from outgoing messages. | |
| 9.6 Removing MIME parts from messages. | |
| 9.7 Limiting ``Received:'' headers in outgoing messages. | |
| 9.8 Setting ``Reply-To: list@host''. | |
| 9.9 Configuring the list so posts are not copied to the original sender. | |
| 9.10 Customizing ezmlm notification messages. | |
| 9.11 Specifying character set and content-transfer-encoding for outgoing ezmlm messages. | |
| 10. Customizing archive retrieval. | |
| 10.1 Specifying the format for retrieved messages. | |
| 10.2 Specifying the default format for digests and archive retrieval. | |
| 10.3 Limiting the number of messages per -get/-index request. | |
| 11. Restricting archive retrieval. | |
| 11.1 Restricting archive access to subscribers. | |
| 11.2 Restricting available archive retrieval commands. | |
| 11.3 Restricting archive retrieval to moderators. | |
| 11.4 Allowing archive retrieval from a non-public list. | |
| 12. Customizing digests. | |
| 12.1 Setting up a digest list. | |
| 12.2 Generating daily digests. | |
| 12.3 Generating the first digest. | |
| 12.4 Adding standard administrative information to digests. | |
| 12.5 Controlling the digest format. | |
| 12.6 Customizing bounce handling. | |
| 13. Remote administration. | |
| 13.1 How can I remotely add moderators, subscriber aliases, etc? | |
| 13.2 Moderating posts from a secondary account. | |
| 13.3 Moderating subscription from a secondary account. | |
| 13.4 Automatically approving posts or subscriptions. | |
| 13.5 Allowing remote administrators to get a subscriber list. | |
| 13.6 Allowing remote administrators to retrieve or search a subscription log. | |
| 13.7 Allowing users to get a subscriber list. | |
| 13.8 Changing the timeout for messages in the moderation queue. | |
| 13.9 Finding out how many messages are waiting for moderation. | |
| 13.10 Using the same moderators for multiple lists. | |
| 13.11 Using different moderators for message and subscription moderation. | |
| 13.12 Setting up moderated lists with the list owner as the ``super moderator'' able to add/remove moderators remotely. | |
| 13.13 Customizing ezmlm administrative messages. | |
| 13.14 Manually approving a message awaiting moderation. | |
| 13.15 Manually rejecting a message awaiting moderation. | |
| 14. Sublists. | |
| 14.1 Sublists of ezmlm lists. | |
| 14.2 Sublists of non-ezmlm lists. | |
| 14.3 How to set up a cluster of list and sublists with standard databases. | |
| 15. Migration to Ezmlm from other Mailing List Managers. | |
| 15.1 Basic Concepts. | |
| 15.2 Setting up ezmlm to respond to host-centric commands. | |
| 15.3 Commands of other mailinglist managers recognized by ezmlm. | |
| 15.3.1 Listproc/Listserv. | |
| 15.3.2 Majordomo. | |
| 15.3.3 Smartlist. | |
| 16. Optimizing list performance. | |
| 16.1 Crond-generated digests for better performance. | |
| 16.2 Optimizing execution of ezmlm-warn(1). | |
| 16.3 Decreasing ezmlm-warn time out to increase performance. | |
| 16.4 Use ezmlm without ezmlm-idx for maximum performance. | |
| 16.5 Not archiving to maximize performance. | |
| 16.6 Sublists to maximize performance. | |
| 17. Miscellaneous. | |
| 17.1 How do I quickly change the properties of my list? | |
| 17.2 Open archived list with daily digests. | |
| 17.3 Variations in moderation | |
| 17.4 Lists that allow remote admin, but not user initiated subscription or archive retrieval. | |
| 17.5 Lists that allow remote admin, user archive retrieval, but not user-initiated subscription. | |
| 17.6 Lists that restrict archive retrieval to subscribers. | |
| 17.7 Lists that do not allow archive retrieval at all. | |
| 17.8 Lists that do not allow archive retrieval and do not allow digest triggering per mail. | |
| 17.9 Lists that allow archive retrieval only to moderators, but allow user-initiated subscription. | |
| 17.10 Lists that do not require user confirmation for (un)subscription. | |
| 17.11 Announcement lists for a small set of trusted posters | |
| 17.12 Announcement lists allowing moderated posts from anyone. | |
| 17.13 Announcement lists with less security and more convenience. | |
| 18. Ezmlm-idx compile time options. | |
| 18.1 Location of binaries. | |
| 18.2 Location of man pages. | |
| 18.3 Base directory of qmail-installation. | |
| 18.4 Short header texts, etc. | |
| 18.5 Arbitrary limits. | |
| 18.6 Command names. | |
| 18.7 Error messages. | |
| 18.8 Paths and other odd configuration items. | |
| 19. Multiple language support. | |
| 19.1 Command names. | |
| 19.2 Text files. | |
| 19.3 Multi-byte character code support. | |
| 20. Subscriber notification of moderation events. | |
| 20.1 General opinions. | |
| 20.2 Users should know that the list is subscription moderated. | |
| 20.3 Subscribers should know that posts are moderated. | |
| 20.4 Senders of posts should be notified of rejections. | |
| 21. Ezmlm-idx security. | |
| 21.1 General assumptions. | |
| 21.2 SENDER manipulation. | |
| 21.3 ezmlm cookies. | |
| 21.4 Lists without remote admin/subscription moderation. | |
| 21.5 Message moderation. | |
| 21.6 Subscription moderation. | |
| 21.7 Remote administration. | |
| 21.8 Remote editing of ezmlm text files. | |
| 21.9 Digest generation and archive retrieval. | |
| 21.10 Convenience for security: the ezmlm-manage ``-S'' and ``-U'' switches. | |
| 21.11 Denial of service. | |
| 21.12 Moderator anonymity. | |
| 21.13 Confidentiality of subscriber E-mail addresses. | |
| 21.14 Help message for moderators. | |
| 21.15 Sublists. | |
| 21.16 SQL databases. | |
| 21.17 Reporting security problems. | |
| ______________________________________________________________________ | |
| 11.. GGeenneerraall IInnffoorrmmaattiioonn | |
| 11..11.. AAcckknnoowwlleeddggeemmeennttss | |
| Many ezmlm users have contributed to improvements in ezmlm-idx. These | |
| are listed in the RREEAADDMMEE..iiddxx file in the ezmlm-idx distribution. | |
| Others have through questions and suggestions inspired parts in this | |
| FAQ, or pointed out errors or omissions. Thanks! Direct contributions | |
| are attributed to the respective authors in the text. Thanks again! | |
| 11..22.. WWhhaatt iiss tthhiiss ddooccuummeenntt?? | |
| This FAQ contains answers to many questions that arise while | |
| installing ezmlm, ezmlm-idx, and while setting up and managing ezmlm | |
| mailing lists. See ``'' for a brief summary of what is ezmlm and what | |
| is ezmlm-idx. | |
| Many aspects of ezmlm are covered in several places in this FAQ. The | |
| early sections explain how ezmlm works. Later sections discuss how to | |
| deal with possible errors/problems. Subsequent sections discuss | |
| details of customization and list setup in a _H_O_W_T_O form. Finally, | |
| there are sections on information philosophy for moderated lists and | |
| on security aspects on ezmlm lists. | |
| This is an evolving document. If you find any errors, or wish to | |
| comment, please do so to the authors. This FAQ is currently aimed at | |
| system administrators and knowledgeable users, and heavily weighted | |
| towards questions specific to the ezmlm-idx add-on. | |
| If you have problems with the ezmlm-idx package, please start by | |
| reading the ``man'' pages which come with each program, then this | |
| document and other ezmlm documentation which is identified here. If | |
| you have exhausted these resources, try the ezmlm and qmail mailing | |
| lists and their respective mailing list archives. If you have solved a | |
| problem not in the documentation, write it up as a proposed section of | |
| a FAQ and send it to the authors. This way, it can be added to the | |
| next version of this FAQ. | |
| 11..33.. TTeerrmmiinnoollooggyy | |
| This document uses a number of terms. Here are the meanings ascribed | |
| to them by the authors. | |
| DDIIRR | |
| The base directory of the list. | |
| SSEENNDDEERR | |
| The envelope sender of the message, as passed to ezmlm by qmail | |
| via the $SENDER environment variable. | |
| LLOOCCAALL | |
| The local part of the envelope recipient. For list-get-1@host, | |
| it is usually _l_i_s_t_-_g_e_t_-_1. If host is a virtual domain, | |
| controlled by _u_s_e_r_-_s_u_b, then local would be _u_s_e_r_-_s_u_b_-_l_i_s_t_-_g_e_t_-_1. | |
| mmooddddiirr | |
| Base directory for moderators. Moderator E-mail addresses are | |
| stored in a hashed database in mmooddddiirr//ssuubbssccrriibbeerrss//. By default, | |
| ``moddir'' is DDIIRR//mmoodd//. | |
| To add or remove moderators: | |
| % ezmlm-sub DIR moddir moderator@host.domain | |
| % ezmlm-unsub DIR moddir moderator@host.domain | |
| ddoottddiirr | |
| The second argument of ezmlm-make is the main .qmail file for | |
| the list. dotdir is the directory in which this ``dot file'' | |
| resides, i.e. the directory part of the ``dot'' argument. This | |
| is usually the home directory of the user controlling the list | |
| (but NOT necessarily of the one creating the list). Thus, _d_o_t_d_i_r | |
| is ~~aalliiaass// if ``root'' creates a list: | |
| # ezmlm-make ~alias/list ~alias/.qmail-list ... | |
| _d_o_t_d_i_r is where the ..eezzmmllmmrrcc file is expected when the ezmlm- | |
| make(1) ``-c'' switch is used (see ``Customizing ezmlm-make opera- | |
| tion''). | |
| eezzmmllmm bbiinnaarryy ddiirreeccttoorryy | |
| The directory where the ezmlm-binaries are normally stored, as | |
| defined at compile time in ccoonnff--bbiinn. This is compiled into the | |
| programs and does not change just because you have moved the | |
| program. | |
| eezzmmllmm--ggeett((11)) | |
| This is a reference to the ezmlm-get.1 man page. Access it with | |
| one of the following: | |
| % man ezmlm-get | |
| % man 1 ezmlm-get | |
| or if you have not yet installed ezmlm-idx (replace ``xxx'' with | |
| the version number): | |
| % cd ezmlm-idx-0.xxx | |
| % man ./ezmlm-get.1 | |
| bbaasseeddiirr | |
| The list directory when referencing the list subscriber address | |
| database. For E-mail addresses stored in a set of files within | |
| DDIIRR//ssuubbssccrriibbeerrss//, the ``basedir'' is ``DIR''. | |
| aaddddrreessss ddaattaabbaassee | |
| A collection of E-mail addresses stored in a set of files within | |
| the ``subscribers'' subdirectory of the basedir, | |
| DDIIRR//ssuubbssccrriibbeerrss//. | |
| mmeessssaaggee mmooddeerraattoorr | |
| An address to which moderation requests for posts to the list | |
| are sent. The moderation requests are formatted with | |
| ``From:''-``reject'' and a ``To:''-``accept'' default headers | |
| for moderator replies. A reply to the ``reject'' address leads | |
| to the rejection of the post. A reply to the ``accept'' address | |
| leads to the acceptance of the post. Any E-mail address can be a | |
| moderator E-mail address. Any number of moderator E-mail | |
| addresses can be used. If a post is sent from a moderator E-mail | |
| address, the moderation request is sent to that E-mail address | |
| only. If a post is sent from an E-mail address that is not a | |
| moderator, a moderation request is sent to all moderators. | |
| The first reply to the moderation request determines the fate of | |
| the message. Further requests for the action already taken are | |
| silently ignored, while a request for the contrary action | |
| results in an error message stating the actual fate of the | |
| message. Thus, if you want to ``accept'' the message and it has | |
| already been accepted, you receive no reply, but if you attempt | |
| to ``reject'' it, you will receive an error message stating that | |
| the message already has been accepted. | |
| Most lists are not message moderated. If they are, the owner is | |
| usually a ``message moderator'', sometimes together with a few | |
| other trusted users. | |
| For an announcement list, it is common to make all the | |
| ``official announcers'' ``message moderators''. This way, they | |
| can post securely and ``accept'' their own posts, while posts | |
| from other users will be sent to this set of ``official | |
| announcers'' for approval. | |
| ssuubbssccrriippttiioonn mmooddeerraattoorr | |
| An E-mail address where subscription moderation requests are | |
| sent. A subscription moderation request is sent after a user has | |
| confirmed her intention to subscribe. The subscription | |
| moderation request is sent to all moderators. As soon as a reply | |
| to this message is received, the user is subscribed and | |
| notified. Any E-mail address can be a subscription moderator and | |
| any number of subscription moderators can be used. | |
| Unsubscribe requests are never moderated (except when the ezmlm- | |
| manage(1) ``-U'' flag is used and the sender attempts to remove | |
| an address other than the one s/he is sending from). It is hard | |
| to imagine a legitimate mailing list that would want to prevent | |
| unsubscriptions. | |
| rreemmoottee aaddmmiinniissttrraattoorr | |
| When a remote administrator subscribes or unsubscribes a list | |
| member, the ``confirm'' request is sent back to the remote | |
| administrator, rather than to the subscriber's E-mail address. | |
| This allows the remote administrator to (un)subscribe any list | |
| member without the cooperation of the subscriber at that | |
| address. Any E-mail address can be a remote administrator and | |
| any number of E-mail addresses can be remote administrators. | |
| The set of E-mail addresses that are ``remote administrators'' | |
| and ``subscription moderators'' are always the same. This set of | |
| E-mail addresses can be ``remote administrators'', | |
| ``subscription moderators'' or both. | |
| For most lists, the owner would be the ``remote administrator'', | |
| if s/he wishes to moderate messages, the owner would be the | |
| ``message moderator'' and if s/he wishes to moderate | |
| subscriptions the owner would also be the ``subscription | |
| moderator''. | |
| The list's ``message moderator(s)'' can be the same, but can | |
| also be set up to be completely different. | |
| CChhaannggiinngg lliisstt ````oowwnneerrsshhiipp'''' | |
| Within this FAQ there are references to the need to check or | |
| change the list ``ownership.'' This is not a reference to the | |
| individual user who is the ``list-owner'', but a reference to | |
| the ownership of the files by your operating system which make | |
| up the list and reside in DDIIRR//. | |
| To change the ownership of DDIIRR// and everything within: | |
| % chown -R user DIR | |
| % chgrp -R group DIR | |
| Depending on your system/shell, it may be possible to combine these | |
| commands into either: | |
| % chown -R user.group DIR | |
| % chown -R user:group DIR | |
| 11..44.. WWhhaatt iiss tthhee ddiiffffeerreennccee bbeettwweeeenn eezzmmllmm aanndd eezzmmllmm--iiddxx?? | |
| ezmlm-0.53 is a qmail-based mailing list manager written by Dan J. | |
| Bernstein. It has all the basic functionality of a mailing list | |
| manager, such as subscriber address management including automated | |
| bounce handling as well as message distribution and archiving. | |
| ezmlm-idx is an add-on to ezmlm. It adds multi-message threaded | |
| message retrieval from the archive, digests, message and subscription | |
| moderation, and a number of remote administration function. It | |
| modifies the configuration program ezmlm-make(1) so that it uses a | |
| text file template rather than compiled-in texts in list creation. In | |
| this manner, ezmlm-idx allows easy setup of lists in different | |
| languages and customization of default list setup. ezmlm-idx also adds | |
| MIME handling, and other support to streamline use with languages | |
| other than English. As an ezmlm add-on, ezmlm-idx does not work | |
| without ezmlm and tries to be compatible with ezmlm as much as | |
| possible. ezmlm-idx also modifies the ezmlm subscriber database to be | |
| case insensitive to avoid many unsubscribe problems. | |
| New in ezmlm-idx-0.40 are better support for announcement lists, | |
| support for QMQP to offload message distribution onto external hosts, | |
| simplified optional SQL database use (MySQL or PostgreSQL), more | |
| flexibility in determining which messages should be moderated, a WWW | |
| interface to the list archives, and many small improvements. | |
| ezmlm-idx-0.32 adds improved handling of very large lists with | |
| optimized bounce handling, ezmlm-split(1) for forwarding (un)subscribe | |
| requests to sublists to allow sublisting transparent to the | |
| subscriber, and SQL support to allow sublisting with improved message | |
| authentication and monitoring of list function, as well as dynamic | |
| addition/removal/reconfiguration of sublists. Also, subscriber | |
| ``From:'' lines are logged with support for finding a subscription | |
| address from a name. The qmail DEFAULT variable is used, if present. | |
| Together, these additions eliminate the most common problems making | |
| ezmlm use and administration even easier. | |
| This document is a FAQ for ezmlm-idx. However, many of the basic items | |
| that are discussed also apply to ezmlm per se. Referring to the two | |
| paragraphs above, it should be relatively easy to figure out which | |
| features require ezmlm-idx. | |
| 11..55.. WWhheerree ccaann II ggeett aallll ooff tthhee eezzmmllmm--rreellaatteedd pprrooggrraammss?? | |
| We have now registered ezmlm.org to make access to ezmlm-idx and | |
| related programs/documentation easier. | |
| DDaann JJ.. BBeerrnnsstteeiinn''ss eezzmmllmm--00..5533 | |
| +o <ftp://cr.yp.to/pub/software/ezmlm-0.53.tar.gz> | |
| +o <ftp://ftp.ezmlm.org/pub/qmail/ezmlm-0.53.tar.gz> | |
| +o <ftp://ftp.ntnu.no/pub/unix/mail/qmail/ezmlm-0.53.tar.gz> | |
| +o <ftp://ftp.pipex.net/mirrors/qmail/ezmlm-0.53.tar.gz> | |
| +o <ftp://ftp.jp.qmail.org/qmail/ezmlm-0.53.tar.gz> | |
| +o <ftp://ftp.rifkin.technion.ac.il/pub/qmail/ezmlm-0.53.tar.gz> | |
| +o <ftp://ftp.mira.net.au/unix/mail/qmail/ezmlm-0.53.tar.gz> | |
| +o <http://www.qmail.org/> | |
| TThhee llaatteesstt vveerrssiioonn ooff eezzmmllmm--iiddxx | |
| ezmlm-idx releases are numbered ``ezmlm-idx-0.xy[z]''. Versions | |
| with the same ``x'' are backwards compatible. A change in ``x'' | |
| signifies major changes, some of which _m_a_y require list changes | |
| (see UPGRADE). However, backwards compatibility with | |
| ezmlm-0.53 list will be maintained. Thus, this is an issue only | |
| if you are already using an older version of ezmlm-idx. | |
| Addition of ``z'' are bug fixes only. Thus, ezmlm-idx-0.301 is | |
| ezmlm-idx-0.30 with known bugs fixed (but no other significant | |
| changes). When available, patches are named | |
| ``filename-0.xy[z].diff'', where ``0.xy[z]'' corresponds to the | |
| release to which they apply. When a number of bugs (or a | |
| significant bug) are found a bug-fix release is made | |
| incorporating all the patches for the previous version. | |
| To get the latest features, look for the highest number (``e.g. | |
| ezmlm-idx-0.40''). Any bugs in versions with new features are | |
| expected to be limited to the new features. | |
| To get the most solid version, get the highest 3-digit number, | |
| i.e. a bug fix. If you already run a version in that series and | |
| a new bug fix is released, see CHANGES to determine if it is | |
| worthwhile to upgrade. Most bugs so far have been relevant only | |
| when using lists in very unusual ways or with rarely used | |
| options. | |
| +o <ftp://ftp.ezmlm.org/pub/patches/> | |
| +o <ftp://gd.tuwien.ac.at/infosys/mail/qmail/ezmlm-patches/> ftp | |
| mirror in Austria. | |
| +o <http://gd.tuwien.ac.at/infosys/mail/qmail/ezmlm-patches/> http | |
| access to the same mirror. | |
| +o <ftp://ftp.win.or.jp/pub/network/mail/qmail/ezmlm-idx/> ftp | |
| mirror in Japan. | |
| eezzmmllmmrrcc((55)) ffiilleess ffoorr ddiiffffeerreenntt llaanngguuaaggeess | |
| The latest versions at the time of release of a package are | |
| included in that package. Thus, this directory will have a file | |
| labeled with the current ezmlm-idx version number only if it has | |
| been updated later than the package. ezmlmrc(5) files are | |
| updated and new ones are added all the time, also with bug fix | |
| releases. Therefore, always look at the latest package. Please | |
| note that ezmlmrc may change significantly between versions. | |
| Thus, do not expect the ezmlm-idx-0.324 ezmlmrc.es to work with | |
| ezmlm-idx-0.40. | |
| ezmlmrc(5) files contain some release-specific configurations. | |
| Do not use a later file (other than from bug fix releases) with | |
| an earlier version of the programs. It is usually OK to use a | |
| version from an earlier package (see UPGRADE), but some new | |
| functionality may nor be available. | |
| To contribute an ezmlmrc(5) file in a new language, start with | |
| the en_US version from the latest package, and send the gzipped | |
| file to bruce@untroubled.org. Please leave comments intact and | |
| in English and do not change the order of items in the file. | |
| This will facilitate maintenance. | |
| +o <ftp://ftp.ezmlm.org/pub/patches/ezmlmrc/> | |
| +o <ftp://gd.tuwien.ac.at/infosys/mail/qmail/ezmlm- | |
| patches/ezmlmrc/> | |
| +o <http://gd.tuwien.ac.at/infosys/mail/qmail/ezmlm- | |
| patches/ezmlmrc/> | |
| +o <ftp://ftp.win.or.jp/pub/network/mail/qmail/ezmlm-idx/ezmlmrc/> | |
| eezzmmllmm--iissssuubb--00..0055 | |
| +o <ftp://ftp.ezmlm.org/pub/patches/ezmlm-issub-0.05.tar.gz>. Use | |
| ezmlm-issub only if you do not use ezmlm-idx. The same | |
| functionality is available in ezmlm-idx and the packages are not | |
| compatible. | |
| +o Also via mirrors mentioned above. | |
| RRPPMMss aanndd SSRRPPMMSS ooff qqmmaaiill,, eezzmmllmm aanndd eezzmmllmm--iiddxx | |
| +o <ftp://ftp.ezmlm.org/pub/patches/> | |
| +o <ftp://summersoft.fay.ar.us/pub/qmail/> | |
| 11..66.. WWhheerree ccaann II ffiinndd ddooccuummeennttaattiioonn ffoorr eezzmmllmm aanndd ppaattcchheess?? | |
| mmaann ppaaggeess | |
| All ezmlm component programs come with their own man pages. | |
| Thus, for info on _e_z_m_l_m_-_s_e_n_d, type: | |
| % man ezmlm-send | |
| or if you have unpacked ezmlm, but not made it or installed it: | |
| % cd ezmlm-0.53 | |
| % man ./ezmlm-send.1 | |
| eezzmmllmm((55)) | |
| General info on ezmlm and list directories is in eezzmmllmm..55: | |
| % man ezmlm | |
| or | |
| % cd ezmlm-0.53 | |
| % man ./ezmlm.5 | |
| _N_O_T_E_: Installation of the ezmlm-idx package updates some existing | |
| man pages to reflect changes made by the patch (e.g. ezmlm- | |
| send(1), ezmlm(5)). | |
| TTeexxtt ffiilleess iinn tthhee ddiissttrriibbuuttiioonn | |
| ezmlm comes with a RREEAADDMMEE file with general instructions, an | |
| IINNSSTTAALLLL file with installation instructions, an UUPPGGRRAADDEE file for | |
| upgrading from a previous version and a CCHHAANNGGEESS file with | |
| information on changes from previous versions. ezmlm-idx comes | |
| with similar files suffixed with ``..iiddxx''. Most other patches or | |
| add-ons contain similar files and man pages and should contain | |
| identifying suffixes (.iss for ezmlm-issub, for example). For a | |
| discussion of the authors' understanding of ezmlm security, see | |
| ``Ezmlm-idx security''. | |
| ````EEzzmmaann'''',, aann eezzmmllmm//iiddxx mmaannuuaall | |
| The ezmlm manual is a brief manual that is meant for list | |
| subscribers, list moderators and remote administrators, and as | |
| an introduction for list owners. It is useful even if you do not | |
| use ezmlm-idx. Features requiring ezmlm-idx are marked as such. | |
| The manual is available as a set of html files, as a text file, | |
| and in a ``letter'' and ``A4'' postscript version: | |
| +o ezman for download <ftp://ftp.ezmlm.org/pub/patches/ezman/> | |
| +o An on-line html version <http://www.ezmlm.org/ezman> | |
| TThhiiss FFAAQQ | |
| This FAQ is built from a sgml source. It is available in the | |
| following formats: | |
| +o A text file <ftp://ftp.ezmlm.org/pub/patches/ezfaq.txt.gz> | |
| +o An on-line html version <http://www.ezmlm.org/> | |
| +o Html for download | |
| <ftp://ftp.ezmlm.org/pub/patches/ezfaq.html.tar.gz> | |
| +o A postscript (letter) version | |
| <ftp://ftp.ezmlm.org/pub/patches/ezfaq.ps.gz> | |
| +o A postscript (A4) version | |
| <ftp://ftp.ezmlm.org/pub/patches/ezfaq.ps4.gz> | |
| +o Via mirrors mentioned for the ezmlm-idx package. | |
| +o An up-to-date text version,FFAAQQ..iiddxx, included with the ezmlm-idx | |
| package. | |
| WWWWWW rreessoouurrcceess | |
| AAnn oonn--lliinnee vveerrssiioonn ooff tthhiiss FFAAQQ | |
| <http://www.ezmlm.org/>The main site with an up-to-date | |
| mirror list. <http://www.de.ezmlm.org/>German mirror. | |
| <http://www.pl.ezmlm.org/www.ezmlm.org/>Polish mirror. | |
| <http://www.jp.ezmlm.org/>Japanese mirror. | |
| <http://www.pt.ezmlm.org/>Portuguese mirror. | |
| <http://www.at.ezmlm.org/>Austrian mirror. | |
| <http://www.ca.ezmlm.org/ezmlm/>Canadian mirror. | |
| GGeenneerraall qqmmaaiill aanndd eezzmmllmm iinnffoo | |
| +o Dan J. Bernstein's qmail page | |
| <http://www.pobox.com/~djb/qmail.html> | |
| +o Dan J. Bernstein's ezmlm page | |
| <http://www.pobox.com/~djb/ezmlm.html> | |
| +o Russell Nelson's qmail page <http://www.qmail.org> | |
| +o Mirrors of www.qmail.org <http://www.ISO.qmail.org>. | |
| Substitute your two-letter country abbreviation for ``ISO''. | |
| TThhee qqmmaaiill mmaaiilliinngg lliisstt aarrcchhiivvee | |
| +o <http://www.ornl.gov/cts/archives/mailing-lists/qmail/> | |
| TThhee eezzmmllmm mmaaiilliinngg lliisstt aarrcchhiivvee | |
| +o <http://sunsite.auc.dk/mhonarc-archives/ezmlm/> | |
| <http://www.ezmlm.org/archive/> This archive of the ezmlm | |
| list is searchable from 11/97-present. ezmlm-cgi(1) is used | |
| to allow direct access to the sublist archive. | |
| MMaaiilliinngg lliissttss | |
| Please read other documentation and mailing list archives before | |
| posting questions to the lists. It's also useful to ``lurk'' on | |
| the list for a few days, (i.e. to subscribe and read without | |
| posting) before asking your questions on the list. | |
| To subscribe, send mail to the E-mail addresses listed: | |
| +o Dan Bernstein's ezmlm list: ezmlm-subscribe@list.cr.yp.to | |
| +o A digest version of the ezmlm list fredr-ezmlm-digest- | |
| subscribe@rivertown.net | |
| +o Dan Bernstein's qmail list: qmail-subscribe@list.cr.yp.to | |
| +o The Japanese ezmlm list: ezmlm-subscribe@jp.qmail.org | |
| +o The Japanese qmail list: qmail-subscribe@jp.qmail.org | |
| 11..77.. WWhheerree ddoo II sseenndd ccoommmmeennttss oonn tthhiiss ddooccuummeenntt?? | |
| To the authors via E-mail: | |
| +^Ho Bruce Guenter, bruce@untroubled.org | |
| +o Fred Lindberg, lindberg@id.wustl.edu | |
| +o Fred B. Ringel, fredr@rivertown.net | |
| 11..88.. HHooww ttoo eexxppeerriimmeenntt wwiitthh nneeww vveerrssiioonnss ooff eezzmmllmm--iiddxx.. | |
| ezmlm-idx>=0.23 writes DDIIRR//ccoonnffiigg in a standard format. If ezmlm- | |
| make(1) is invoked with the ``-e'' or ``-+'' switch and the ``DIR'' | |
| argument only, ezmlm-make(1) will read other arguments from this file. | |
| The difference between the switches is that with ``-e'' the options | |
| used are the ones specified on the command line, whereas with ``-+'' | |
| they are the ones currently active for the list, as overridden by any | |
| command line options. Thus, with just: | |
| % ezmlm-make -+ DIR | |
| you can rebuild the list, without affecting any archives, list state | |
| variables, etc. You will _l_o_s_e _m_a_n_u_a_l _c_u_s_t_o_m_i_z_a_t_i_o_n_s _t_o _s_o_m_e _o_f _y_o_u_r | |
| _f_i_l_e_s. However, text files and DDIIRR//hheeaaddeerraadddd are protected against | |
| being overwritten, so that your manual customizations of these files | |
| are retained. To override this protection, simply specify the used | |
| edit switch twice, e.g. ``-ee'' and ``-++'', respectively. This is a | |
| feature introduced in ezmlm-idx-0.40. | |
| To test a new version of ezmlm-idx or to run several version, make the | |
| new version as per IINNSSTTAALLLL..iiddxx (if you haven't used ezmlm-idx before) | |
| or UUPPGGRRAADDEE..iiddxx (if you've got a previous version of ezmlm-idx | |
| installed), setting ccoonnff--bbiinn to a new directory. You can use either | |
| the current directory or any other directory. If not using the current | |
| dir, you also have to: | |
| % make install | |
| If you now edit the list using the new ezmlm-make program, the list | |
| will automatically be configured to use the new binaries. To change | |
| back to the ``default'' installation, just edit the list again, this | |
| time with the old ezmlm-make(1). | |
| If your system has an //eettcc//eezzmmllmmrrcc file, you may need to temporarily | |
| place the eezzmmllmmrrcc((55)) file for the ezmlm version you want to test in | |
| ddoottddiirr of the list and use the ezmlm-make(1) ``-c'' switch (see | |
| ``Terminology: dotdir''). | |
| ezmlm-idx>=0.314 comes with ezmlm-test(1), a program that tests most | |
| functions of ezmlm+idx and can be used before installation. | |
| 22.. QQuuiicckk ssttaarrtt | |
| 1. Create a use ``eztest'' for testing. If you use another name, add | |
| the switch ``-u another_name'' to the ezmlm-test(1) line below. | |
| (The space between the switch and the argument is required.) | |
| 2. Unpack the ezmlm-0.53 distribution. | |
| 3. Unpack the ezmlm-idx distribution. | |
| 4. Move the ezmlm-idx files to the ezmlm-0.53 directory. | |
| 5. Edit ccoonnff--bbiinn and ccoonnff--mmaann to reflect the target directories. | |
| 6. build and install: | |
| % cd ezmlm-0.53 | |
| % patch < idx.patch | |
| % make; make man | |
| % su | |
| # su eztest | |
| % ./ezmlm-test | |
| % exit | |
| # make install | |
| # exit | |
| 7. Make a list and digest list | |
| % ezmlm-make -rdugm -5 me@host ~/list ~/.qmail-list me-list host | |
| % ezmlm-sub ~/list me@host | |
| % ezmlm-sub ~/list digest me@host | |
| % ezmlm-sub ~/list mod me@host | |
| where ``me'' is your user name and ``host'' the host your list is on. | |
| Now, you are the owner, remote administrator, and subscriber of both | |
| list@host and the accompanying digest list list-digest@host. Only | |
| subscribers are allowed to access the archive and to post. To post to | |
| the list, mail to list@host. For a user to subscribe, s/he should mail | |
| to list-subscribe@host and for help to list-help@host. | |
| When a non-subscriber posts, you will be asked to approve, reject, or | |
| ignore the request. If you want to subscriber joe@joehost.dom, mail | |
| list-subscribe-joe=joehost.dom@host. | |
| Digests are generated about every two days, when 30 messages have | |
| arrived since the last digest, or when more than 64 kbytes of message | |
| body has arrived. To manage the digest list, use the same commands as | |
| the main list, but replace ``list'' with ``list-digest''. | |
| The sender restriction on posting used in this setup works, but is not | |
| secure. For more info, read the man pages (start with ezmlm(5) and | |
| ezmlm-make(1)), this FAQ (FFAAQQ..iiddxx in the distribution), | |
| RREEAADDMMEE//RREEAADDMMEE..iiddxx, IINNSSTTAALLLL//IINNSSTTAALLLL..iiddxx, and UUPPGGRRAADDEE..iiddxx. | |
| 33.. OOvveerrvviieeww ooff mmaaiilliinngg lliisstt mmaannaaggeemmeenntt aanndd mmaaiilliinngg lliisstt mmaannaaggeerrss | |
| (To be written. Until then, please consult the | |
| <http://www.ezmlm.org/ezman/> manual for ezmlm and ezmlm-idx related | |
| material.) | |
| 44.. OOvveerrvviieeww ooff eezzmmllmm ffuunnccttiioonn | |
| 44..11.. TThhee bbaassiicc sseettuupp.. | |
| In designing ezmlm, _D_a_n _J_. _B_e_r_n_s_t_e_i_n has used the unix philosophy of | |
| small component programs with limited and well defined functions. | |
| Requests for specific functions can then be met by the addition of new | |
| programs. | |
| Thanks to the program execution mechanism Dan built into qmail, it is | |
| easy to execute several small programs per delivery in a defined | |
| sequence. It is also very easy to add shell scripts for further | |
| customization. | |
| 44..22.. IInnvveennttiioonnss iinn eezzmmllmm.. | |
| Dan J. Bernstein has written ezmlm in C. It is written for speed and | |
| reliability even in the face of power loss and NFS. These features | |
| are augmented to a large extent by the ruggedness of the qmail (also | |
| by Dan) delivery mechanism (see qmail-command(8)). | |
| ezmlm uses some routines and techniques that still are not frequently | |
| seen in many mailing list managers. For example, subscriber E-mail | |
| addresses are stored in a hash so that searches require reading only, | |
| at most, 2% of the E-mail addresses. ezmlm has a optional message | |
| archive, where messages are stored 100 per directory, again to allow | |
| more efficient storage and retrieval. Important files are written | |
| under a new name and, only when safely written, moved in place, to | |
| assure that crashes do not leave the list in an undefined state. | |
| In addition, ezmlm has a number of new inventions. One of these is | |
| bounce detection, which generates an automatic warning containing | |
| information identifying the messages which have bounced, followed by a | |
| probe message to the E-mail addresses for which mail has bounced. If | |
| the probe bounces, the address is unsubscribed. Thus, the system won't | |
| remove E-mail addresses due to temporary bounces: it takes 12 days | |
| after the first bounce before a warning is sent, and another 12 days | |
| of bounces after the warning bounce before the probe message is set. | |
| Another Dan J. Bernstein invention is the use of cryptographic cookies | |
| based on a timestamp, address, and action. These are used to assure | |
| that the user sending a request to subscribe or unsubscribe really | |
| controls the target address. It is also used to prevent forgery of | |
| warning or probe messages to make it exceedingly difficult to subvert | |
| the bounce detection mechanism to unsubscribe another user. | |
| 44..33.. TThhee qqmmaaiill ddeelliivveerryy mmeecchhaanniissmm.. | |
| See qmail(7), qmail-local(8), qmail-command(8), envelopes(5), and dot- | |
| qmail(5). Briefly, qmail having resolved the delivery address | |
| delivers it via the ..qqmmaaiill file that most completely matches the | |
| address. This file may be a link to another file, as is the case in | |
| ezmlm lists. qmail then delivers the message according to successive | |
| lines in this file forwarding it to an address, storing it, or piping | |
| it to a program. In the latter case, the program is expected to exit 0 | |
| leading delivery to proceed to the next line in the ..qqmmaaiill file, or 99 | |
| leading to success without delivery to succeeding lines. An exit code | |
| of 100 is a permanent error leading to an error message to the SENDER. | |
| An exit code of 111 is used for temporary errors, leading to re- | |
| delivery until successful or until the queue lifetime of the message | |
| has been exceeded. | |
| Delivery granularity is the ..qqmmaaiill file and re-deliveries start at the | |
| top. Thus, if the message fails temporarily at a later line, the | |
| delivery according to an earlier line will be repeated. Similarly, | |
| qmail may have made deliveries successfully according to most of the | |
| ..qqmmaaiill file and then fail permanently. The SENDER is informed that the | |
| delivery failed, but not about at which point. | |
| ezmlm takes advantage of these basic mechanisms to build a fast, | |
| efficient, and very configurable mailing list manager from a set of | |
| small independent programs. | |
| 44..44.. WWhhaatt tthhee ddiiffffeerreenntt pprrooggrraammss ddoo.. | |
| See ezmlm(5) and the man pages for the different programs (listed in | |
| ezmlm(5)). | |
| 44..55.. WWhhaatt tthhee ddiiffffeerreenntt ffiilleess iinn tthhee lliisstt ddiirreeccttoorryy ddoo.. | |
| See ezmlm(5). | |
| 44..66.. TThhee ppaappeerr ppaatthh ffoorr ppoossttss.. | |
| Messages to the list are delivered to a ..qqmmaaiill file, usually ~~//..qqmmaaiill-- | |
| lliissttnnaammee which is linked to DDIIRR//eeddiittoorr. Here, the message is first | |
| delivered to ezmlm-reject(1) which can reject messages based on | |
| subject line contents, MIME content-type, and message body length. It | |
| also by default rejects all messages that do not have the list address | |
| in the ``To:'' or ``Cc:'' header. This eliminates most bulk spam. If | |
| the list is set up for restrictions based on envelope SENDER, the next | |
| delivery is to one or more instances of ezmlm-issubn(1). If the | |
| messages passed this check, it is usually delivered to ezmlm-send(1) | |
| for distribution. If the list is message moderated, it is instead | |
| delivered to ezmlm-store(1) which queues the message and sends out a | |
| moderation request. ezmlm-gate(1) is used by some other setups. It | |
| will for message moderated lists invoke ezmlm-send(1) directly if the | |
| message is from a specific set of SENDERs, and in other cases ezmlm- | |
| store(1) to send the message out for moderation. | |
| You can specify a separate ..qqmmaaiill-like file for ezmlm-gate(1). The | |
| lines will be executed and the return codes determine if the message | |
| is rejected, sent to the list, or sent to the moderator. See man page | |
| for details. | |
| If the list is configured for digests, DDIIRR//eeddiittoorr also contains an | |
| ezmlm-tstdig(1) line followed by an ezmlm-get(1) line. If ezmlm- | |
| tstdig(1) determines that the criteria are met for digest generation, | |
| it exits with an exit code of 0, causing the ezmlm-get(1) line to be | |
| executed leading to a digest mailing. Otherwise, ezmlm-tstdig(1) exits | |
| 99, resulting in the remainder of the DDIIRR//eeddiittoorr file to be ignored | |
| too long. The digest is not related to the message being delivered, | |
| but the delivery is used to trigger execution of the relevant | |
| programs. | |
| In addition, DDIIRR//eeddiittoorr contains a number of house-keeping functions. | |
| These are invocations of ezmlm-warn(1) to send out bounce warnings and | |
| and (if the list is moderated) ezmlm-clean(1) to clean the moderation | |
| queue of messages that have been ignored. Again, these functions are | |
| not related to the specific message delivered, but the delivery itself | |
| is used as a convenient ``trigger'' for processing. | |
| 44..77.. TThhee eezzmmllmm ppaatthh ffoorr mmooddeerraattiioonn mmeessssaaggeess.. | |
| Replies to moderation requests are channeled to DDIIRR//mmooddeerraattoorr. This | |
| file contains an invocation of ezmlm-moderate(1) which invokes ezmlm- | |
| send(1) for accepted messages and sends out a rejection notice for | |
| rejected messages. It also sends error messages if the message is not | |
| found or already accepted/rejected _c_o_n_t_r_a_r_y to the moderation message. | |
| Thus, if you accept a message already accepted, no error message is | |
| sent. ezmlm-clean(1) is also invoked from DDIIRR//mmooddeerraattoorr for house | |
| keeping. | |
| 44..88.. TThhee eezzmmllmm ppaatthh ffoorr aaddmmiinniissttrraattiivvee mmeessssaaggeess.. | |
| Administrative requests for both list and digest lists are captured by | |
| ~~//..qqmmaaiill--lliissttnnaammee--ddeeffaauulltt linked to DDIIRR//mmaannaaggeerr. Here they are | |
| delivered first to ezmlm-get(1) which processed archive retrieval | |
| requests, exiting 99 after successful completion which causes the rest | |
| of the delivery lines to be ignored. If the request is not for ezmlm- | |
| get(1) it rapidly exits 0. This leads to invocation of ezmlm-manage(1) | |
| which handles subscriber database functions, help messages, and (if | |
| configured) editing of DDIIRR//tteexxtt// files. Again, ezmlm-warn(1) lines are | |
| included for bounce directory processing. | |
| If configured, an ezmlm-request(1) line is present. This program | |
| constructs valid ezmlm requests from command in the subject lines of | |
| messages sent to listname-request@host and exits 99. These requests | |
| are mailed and will then return to be processed by one of the other | |
| programs. | |
| 44..99.. TThhee eezzmmllmm ppaatthh ffoorr bboouunncceess.. | |
| Bounces to the list are handled by DDIIRR//bboouunncceerr. For the digest list | |
| this is DDIIRR//ddiiggeesstt//bboouunncceerr. The two were combined in previous | |
| versions, which is still supported. As this leads to problems with | |
| list names ending in ``digest'', the functions are separate with lists | |
| set up or edited with ezmlm-idx>=0.32. The bounce is first delivery is | |
| to ezmlm-weed(1) which removes delivery delay notification and other | |
| junk. The second to ezmlm-return(1) which analyzes valid bounces | |
| storing the information in DDIIRR//bboouunnccee// for the list and | |
| DDIIRR//ddiiggeesstt//bboouunnccee// for the digest. This is the information that | |
| ezmlm-warn(1) (invoked from DDIIRR//eeddiittoorr and DDIIRR//mmaannaaggeerr) uses and | |
| processes for automatic bounce handling. ezmlm-return(1) will also | |
| unsubscribe a subscriber from whom a probe message has bounced. | |
| 44..1100.. MMeessssaaggeess ttoo lliisstt--oowwnneerr aanndd lliisstt--ddiiggeesstt--oowwnneerr.. | |
| These are processed by DDIIRR//oowwnneerr and delivered to DDIIRR//mmaaiillbbooxx by | |
| default. It is better to put the real owner address in this location. | |
| This can be done manually, via editing of eezzmmllmmrrcc((55)), or via the | |
| ezmlm-make(1) -5 switch. Again, some house-keeping functions are also | |
| executed. | |
| 44..1111.. SSttrruuccttuurree ooff ssuubbssccrriibbeerr ddaattaabbaasseess.. | |
| ezmlm subscriber E-mail addresses are stored within DDIIRR//ssuubbssccrriibbeerrss// | |
| as a hashed set of 53 files. The hash calculated from the address | |
| determines which of the 53 files and address is stored in. Thus, to | |
| find out if an address is a subscriber, ezmlm has to read at most | |
| about 2% of the E-mail addresses. The hash function insures that E- | |
| mail addresses are reasonably evenly distributed among the 53 files. | |
| Addresses in the files in DDIIRR//ssuubbssccrriibbeerrss// are stored as strings | |
| starting with ``T'', followed by the address, followed by a zero byte. | |
| This is the same format as taken by qmail-queue(8) on file descriptor | |
| 1. Thus, subscriber lists can be directly copied to qmail without any | |
| further processing. | |
| With ezmlm-idx>=0.32 you can use an SQL server for the subscriber | |
| databases. Please see the SQL section (``ezmlm support for SQL | |
| datbases''). | |
| 44..1122.. LLooccaall ccaassee iinn EE--mmaaiill aaddddrreesssseess.. | |
| rfc822 states that the host part of an address is case insensitive, | |
| but that case of the local part should be respected and the | |
| interpretation of it is the prerogative of the machine where the | |
| mailbox exists. Thus, ezmlm preserves the case of the local part, but | |
| converts the host part to lower case. ezmlm proper also bases the hash | |
| on the case of the local part, so that USER@host and user@host are not | |
| (usually) stored in the same file. | |
| Locally, deliveries are most often case insensitive, i.e. mail to | |
| USER@host and user@host are delivered to the same mail box. A | |
| consequence of this is that many users use E-mail addresses with | |
| different case interchangeably. The problem is that when USER@host is | |
| subscribed, ezmlm will not find that address in response to an | |
| unsubscribe request from user@host. This is even more problematic when | |
| E-mail addresses have been added by hand to e.g. moderator lists. | |
| ezmlm-idx>=0.22 changes address storage to make comparisons case | |
| insensitive and store E-mail addresses based on the hash of the all | |
| lower case address. Case is maintained for the local part. Thus, if | |
| USER@host is subscribed, mail is set to USER@host, but user@host is | |
| recognized as a subscriber and an unsubscribe request from user@host | |
| will remove USER@host from the subscriber list. | |
| To maintain backwards compatibility with old subscriber lists, a | |
| second lookup is made for partially upper case E-mail addresses in | |
| some cases. This will find USER@host subscribed with a case sensitive | |
| hash as well. | |
| If may be useful to move all old mixed case E-mail addresses to the | |
| ``new'' positions. Without this, USER@host subscribed with the old | |
| system will be able to unsubscribe as USER@host, but not as user@host. | |
| After the repositioning, s/he will be successfully able to use any | |
| case in an unsubscribe request, e.g. UsEr@host. To do this: | |
| % ezmlm-list DIR | grep -G '[A-Z]' > tmp.tmp | |
| % xargs ezmlm-sub DIR < tmp.tmp | |
| This works, because subscribing an address, even if it already exists, | |
| will assure that it is stored with a case insensitive hash. On some | |
| systems, the grep ``-G'' switch need/should not be used. | |
| 44..1133.. TTeessttiinngg SSEENNDDEERR ttoo aallllooww ppoossttss oonnllyy ffrroomm lliisstt ssuubbssccrriibbeerrss.. | |
| This mode of operation is automatically set up if you specify the | |
| ezmlm-make(1) ``-u'' switch. Since there may be some addresses that | |
| should be allowed to post, but are not subscribers of list or list- | |
| digest, ezmlm-make(1) sets up an additional address database in | |
| DDIIRR//aallllooww//. Use ezmlm-sub(1), ezmlm-unsub(1), and ezmlm-list(1) to | |
| manipulate these addresses. If the list is configured for remote | |
| administration (see ``How remote administration works''), you can | |
| add/remove addresses from the DDIIRR//aallllooww// database by mailing list- | |
| allow-subscribe@listhost and list-allow-unsubscribe@listhost, | |
| respectively. Other commands that access subscriber databases work in | |
| the same manner. | |
| To similarly restrict archive access, use the ezmlm-make(1) ``-g'' | |
| switch. | |
| Since SENDER is under the control of a potential attacker, it is not | |
| secure to use tests of SENDER for anything important. However, when | |
| replies are always sent to SENDER (such as for archive access), a | |
| check of SENDER can prevent the sending of information to E-mail | |
| addresses not in the database. | |
| To test sender, use the program ezmlm-issubn(1). It will return 0 | |
| (true for the shell, success for qmail deliveries) if SENDER is in at | |
| least one of a set of subscriber databases. If not, it will return 99 | |
| (false for the shell: success, but skip remainder of ..qqmmaaiill file for | |
| qmail deliveries). The basedirs of the subscriber lists (i.e. the | |
| directories in which the ``subscriber'' dirs are located) are given as | |
| arguments. ezmlm-issubn(1) can take any number of arguments. | |
| Thus, to permit an action if SENDER is a subscriber to the list in any | |
| of DDIIRR//, DDIIRR//ddiiggeesstt//, or DDIIRR//aallllooww// and exit silently, put the | |
| following into the relevant ..qqmmaaiill file: | |
| |/usr/local/bin/ezmlm/ezmlm-issubn DIR DIR/digest DIR/allow [...] | |
| |/path/action_program | |
| Restricting your list to posts from your subscribers is as easy as | |
| that. If your ezmlm binaries are in a different directory, you may | |
| have to modify the ezmlm-issubn(1) path. | |
| ezmlm-issubn(1) has a ``-n'' switch which ``negates/reverses'' the | |
| exit code. To do an action if SENDER is _N_O_T a subscriber of any of | |
| the lists: | |
| |/usr/local/bin/ezmlm/ezmlm-issubn -n DIR/deny [dir2 ...] | |
| |/path/other_program | |
| To automatically configure the list with a blacklist address database | |
| in DDIIRR//ddeennyy, use the ezmlm-make(1) ``-k'' switch. If the list is | |
| configured for remote administration (see ``How remote administration | |
| works'') and if you are a remote administrator, you can manipulate the | |
| ``deny'' database remotely by sending mail to list-deny-subscribe- | |
| user=userhost@listhost, etc. | |
| 44..1144.. HHooww ccooookkiieess wwoorrkk.. | |
| Each ezmlm list has it's own ``key'' created by ezmlm-make at setup | |
| time. This key is stored in DDIIRR//kkeeyy, and you can improve it by adding | |
| garbage of your own to it. However, changing the key will make all | |
| outstanding cookies invalid, so this should be done when the list is | |
| established. | |
| When ezmlm receives an action request, such as ``subscribe'', it | |
| constructs a cookie as a function of: | |
| +o the request, | |
| +o the time, | |
| +o and the target address. | |
| The cookie and these items are then assembled into a address that | |
| is sent out as the ``Reply-To:'' address in the confirmation | |
| request sent to the subscriber. When the subscriber replies, ezmlm | |
| first checks if the timestamp is more than 1,000,000 seconds old | |
| (approx 11.6 days) and rejects the request if it is. Next, ezmlm | |
| recalculates the cookie from the items. If the cookies match, the | |
| request is valid and will be completed. Depending on the | |
| circumstances, ezmlm generates an error message or a new cookie | |
| based on the current time and sends the target a new confirmation | |
| request. | |
| Dan has based these cookies on cryptographic functions that make it | |
| very unlikely that a change in any part of the cookie or the items | |
| will result in a valid combination. Thus, it is virtually impossible | |
| to forge a request even for someone who has a number of valid requests | |
| to analyze. Since the algorithm ezmlm uses is available, the security | |
| rests on the key (and the correctness of the algorithm). Anyone who | |
| knows the key for your lists can easily construct valid requests. | |
| As ezmlm-make(1) doesn't use a truly random process to generate the | |
| key, it is theoretically possible that someone with sufficient | |
| knowledge about your system can guess your key. In practice, this is | |
| very unlikely, and the safety of the system is orders of magnitude | |
| higher than that of other mechanisms that you may rely on in your list | |
| management and mail transport (exclusive of strong encryption, such as | |
| _P_G_P). | |
| 44..1155.. HHooww mmooddeerraattoorr EE--mmaaiill aaddddrreesssseess aarree ssttoorreedd.. | |
| Moderator E-mail addresses are stored just like ezmlm subscriber | |
| addresses, in a set of up to 53 files within the ssuubbssccrriibbeerrss | |
| subdirectory of the list's bbaasseeddiirr//. For subscribers, the bbaasseeddiirr// is | |
| the list directory itself, i.e. DDIIRR//. For moderators, the default is | |
| DDIIRR//mmoodd//, which can be overridden by placing a bbaasseeddiirr name (starting | |
| with a ``/'') in DDIIRR//mmooddssuubb, DDIIRR//rreemmoottee, or DDIIRR//mmooddppoosstt for | |
| subscription moderation, remote administration, and message | |
| moderation, respectively. This permits the use of one moderator | |
| database for multiple lists. _N_o_t_e_: _S_u_b_s_c_r_i_p_t_i_o_n _m_o_d_e_r_a_t_o_r_s _a_n_d _r_e_m_o_t_e | |
| _a_d_m_i_n_i_s_t_r_a_t_o_r_s _a_r_e _a_l_w_a_y_s _t_h_e _s_a_m_e _a_d_d_r_e_s_s_e_s_. _I_f _b_o_t_h DDIIRR//mmooddssuubb and | |
| DDIIRR//rreemmoottee contain paths, only the DDIIRR//mmooddssuubb path is used. | |
| 44..1166.. HHooww ssuubbssccrriippttiioonn mmooddeerraattiioonn wwoorrkkss.. | |
| Subscription moderation is a simple extension of the ezmlm subscribe | |
| mechanism. Once the user has confirmed the subscribe request, a new | |
| request is constructed with a _d_i_f_f_e_r_e_n_t _a_c_t_i_o_n _c_o_d_e. This is sent out | |
| to the moderator(s). When a moderator replies with a valid request and | |
| cookie combination, the user is subscribed. The user is then also | |
| welcomed to the list. Other moderators won't know that the request has | |
| already been approved. If other moderators reply to the request, no | |
| notification of the duplicate action is sent to the subscriber of the | |
| duplicate action. Ezmlm knows that this is a repeat request since the | |
| target address is already a subscriber. | |
| The moderators are not informed about the result, unless there was an | |
| error (subscribing a target that is already a subscriber is not | |
| considered an error). This cuts down the number of messages a | |
| moderator receives. Any list moderator knows (or _s_h_o_u_l_d know) the | |
| qmail/ezmlm/unix paradigm: _i_f _y_o_u_'_r_e _n_o_t _t_o_l_d _o_t_h_e_r_w_i_s_e_, _y_o_u_r _c_o_m_m_a_n_d | |
| _w_a_s _c_a_r_r_i_e_d _o_u_t _s_u_c_c_e_s_s_f_u_l_l_y. This may be counterintuitive to those | |
| used to some other operating systems, but in our experience it doesn't | |
| take long to get used to the reliability and efficiency of | |
| U*ix/qmail/ezmlm. | |
| Subscription moderation is enabled by creating DDIIRR//mmooddssuubb and adding | |
| the subscription moderator to DDIIRR//mmoodd//: | |
| % ezmlm-sub DIR mod moderator@host | |
| To use an alternative basedir for subscription moderators, place that | |
| directory name with a leading ``/'' in DDIIRR//mmooddssuubb. | |
| 44..1177.. HHooww rreemmoottee aaddmmiinniissttrraattiioonn wwoorrkkss.. | |
| The term ``remote administration'' is used to denote the ability of a | |
| list administrator by E-mail to add or remove any E-mail address from | |
| the subscriber list without the cooperation of the user. Normally, | |
| when user@userhost sends a message to list-subscribe- | |
| other=otherhost@listhost to subscribe other@otherhost, the | |
| confirmation request goes to other@otherhost. However, if remote | |
| administration is enabled and user@userhost is a moderator, a | |
| confirmation request (with a different action code) is sent back to | |
| user@userhost instead. The reply from the administrator is suppressed | |
| in the welcome message sent to the new subscriber (other@otherhost). | |
| This protects the identity of the remote administrator. | |
| Remote administration is enabled by creating DDIIRR//rreemmoottee and adding the | |
| remote administrator E-mail address(es) to DDIIRR//mmoodd//: | |
| % ezmlm-sub DIR mod remoteadm@host | |
| To use an alternative basedir for remote administrators, place that | |
| directory name with a leading ``/'' in DDIIRR//mmooddssuubb. Remote administra- | |
| tors and subscription moderators databases always consist of the same | |
| E-mail addresses. If both are enabled and one of DDIIRR//mmooddssuubb and | |
| DDIIRR//rreemmoottee contains an alternative basedir name, this basedir is used | |
| for both functions. If both DDIIRR//mmooddssuubb and DDIIRR//rreemmoottee contain direc- | |
| tory names, the one in DDIIRR//mmooddssuubb is used for both functions. | |
| Remote administrators can add and remove addresses to the digest list, | |
| the ``allow'' list (user aliases for lists using SENDER restrictions | |
| on posting and archive access), and if used the ``deny'' list | |
| containing addresses that are denied posting rights to the list. The | |
| latter is easy to circumvent and intended to block errant mail robots, | |
| rather than human users. | |
| 44..1188.. HHooww mmeessssaaggee mmooddeerraattiioonn wwoorrkkss.. | |
| ezmlm-store(1), invoked in DDIIRR//eeddiittoorr, receives messages for message | |
| moderated lists. If DDIIRR//mmooddppoosstt does not exist, ezmlm-store(1) just | |
| calls ezmlm-send(1) and the message is posted to the list as if it | |
| were not moderated. If DDIIRR//mmooddppoosstt exists, ezmlm-store(1) places the | |
| message in DDIIRR//mmoodd//ppeennddiinngg//. It also sends a moderation request to | |
| all the moderators. Included with this request is a copy of the | |
| message. The ``From:'' and ``Reply-To:'' E-mail addresses contain | |
| codes for ``reject'' and ``accept'', together with a unique message | |
| name (derived from the message timestamp and process id) and a cookie | |
| based on these items. When a moderator replies, ezmlm-moderate(1) is | |
| invoked via DDIIRR//mmooddeerraattoorr. ezmlm-moderate(1) validates the request, | |
| and if the request is valid and the message is found in | |
| DDIIRR//mmoodd//ppeennddiinngg//, it carries out the requested action. | |
| If the request is ``reject'' the post is returned to SENDER with an | |
| explanation and an optional moderator comment. If the request is | |
| ``accept'' the message is posted to the list via ezmlm-send(1). As the | |
| request is processed, a stub for the message is created in | |
| DDIIRR//mmoodd//rreejjeecctteedd// or DDIIRR//mmoodd//aacccceepptteedd// for ``reject'' and ``accept'' | |
| requests, respectively. | |
| If a valid reply is received but the message is no longer in | |
| DDIIRR//mmoodd//ppeennddiinngg//, ezmlm-moderate(1) looks for the corresponding stub | |
| in DDIIRR//mmoodd//rreejjeecctteedd// and DDIIRR//mmoodd//aacccceepptteedd//. If the stub is found and | |
| the fate of the message was the one dictated by the new request, no | |
| further action is taken. If, however, no stub is found or the request | |
| and the actual message fate do not match, a notification is sent to | |
| the moderator. This scheme was chosen to impart a maximum of | |
| information with a minimum of messages. Also, it is the least | |
| demoralizing setup for multiple moderator lists, where it is important | |
| not to notify subsequent moderators that their work was in vain since | |
| the action of the first responding moderator has already resulted in | |
| processing of the message. | |
| If a message is not ``rejected'' or ``accepted'' it remains in | |
| DDIIRR//mmoodd//ppeennddiinngg// until it times out. Cleanup of both messages and | |
| stubs is accomplished by ezmlm-clean(1) which is invoked through both | |
| DDIIRR//eeddiittoorr and DDIIRR//mmooddeerraattoorr for message moderated lists. ezmlm- | |
| clean(1) looks at the timestamp used to generate the message/stub | |
| name. If it is older than 120 hours (configurable in a range of 24-240 | |
| hours, by placing the value in DDIIRR//mmooddttiimmee) it is removed. Unless | |
| suppressed with the ezmlm-clean(1) ``-R'' switch, the SENDER of the | |
| message is notified. | |
| By default, the E-mail addresses of message moderators are stored as a | |
| subscriber list with a basedir of DDIIRR//mmoodd//. This can be changed to | |
| any other bbaasseeddiirr by placing the name of that directory with a leading | |
| ``/'' in DDIIRR//mmooddppoosstt. Although the default basedirs for message | |
| moderation and subscription moderation/remote administration are the | |
| same, both the functions and actors are entirely independent. | |
| 44..1199.. HHooww QQMMQQPP ssuuppppoorrtt wwoorrkkss | |
| qmail processes messages on a first-come-first-served basis. This | |
| means that when it receives a post to 100,000 subscribers, it will try | |
| all the recipients before processing the next message. Often, it is | |
| desirable to offload this work to an external host so that the main | |
| list host remains responsive to e.g. ``subscribe'' and archive access | |
| commands, as well as to other mail is it is not a dedicated mail host. | |
| ezmlm-idx allows the main distribution work to be offloaded to an | |
| external server via the QMQP protocol. Configure qmail-qmqpc(1) on the | |
| list host, and qmail-qmqpd(1) on the mail host (see qmail docs for | |
| details), then create the file DDIIRR//qqmmqqppsseerrvveerrss//00. The list housed in | |
| DDIIRR will now use the QMQP server for posts, by the local qmail for | |
| other messages. If you apply the qmail-qmqpc.tar.gz patch (included in | |
| the ezmlm-idx distribution), you can specify the QMQP server IP | |
| addresses, one per line, in DDIIRR//qqmmqqppsseerrvveerrss//00, just as you normally | |
| would in //vvaarr//qqmmaaiill//ccoonnttrrooll//qqmmqqppsseerrvveerrss. If the first server cannot | |
| be contacted, the installation will try the second, and so on. The | |
| advantage of controlling the servers locally is that you can specify | |
| different servers for different lists. A good idea is to set up also | |
| the list host as a QMQP server and use that as the last IP address. | |
| This way, the list host will be used if the main QMQP server cannot be | |
| contacted. Of course, ezmlm does not loose messages, but rather lets | |
| qmail redeliver the post if no QMQP server is available. | |
| 44..2200.. HHooww mmeessssaaggeess aarree ssttoorreedd iinn tthhee aarrcchhiivvee.. | |
| The structure of the ezmlm list archive is described in the ezmlm(5) | |
| manual page. Basically, the message is stored in DDIIRR//aarrcchhiivvee//nn//mm, | |
| where ``n'' is the message number divided by 100 and ``m'' the | |
| remainder (2 digits). The first message is stored in DDIIRR//aarrcchhiivvee//00//0011. | |
| 44..2211.. HHooww tthhee mmeessssaaggee iinnddeexx wwoorrkkss.. | |
| The ezmlm-idx(1) adds the option (default) of a message index to | |
| ezmlm. The ``From:'' line, the subject, the author's E-mail address | |
| and name and the time of receipt are logged for each message as it is | |
| received. The subject is ``normalized'' by concatenating split lines | |
| and removing reply-indicators such as ``Re:''. A hash of the | |
| normalized subject with all white space removed is also stored. The | |
| hash for any message within a thread is almost always the same and is | |
| used together with the order of receipt to connect a set of messages | |
| into a ``thread''. A hash is needed due to the inconsistent handling | |
| by MUAs of white space in rfc2047-encoded subject headers. | |
| The message index is stored as DDIIRR//aarrcchhiivvee//nn//iinnddeexx, where ``n'' is the | |
| message number mod 100. Thus, the directory DDIIRR//aarrcchhiivvee//5522// stores | |
| messages 5200 through 5299 and the file ``index'' which contains the | |
| index for those messages. | |
| The message index can be retrieved with the -index command (see ezmlm- | |
| get(1)). You can also retrieve a range of messages, a specific thread, | |
| or generate a message digest (see ezmlm-get(1)). Each of these | |
| commands can be disabled or restricted as desired by the list owner. | |
| The ezmlm-idx(1) can be used at any time to either reconstruct an | |
| existing index or create one an index for an existing message archive. | |
| without one. | |
| 44..2222.. HHooww tthhrreeaaddiinngg wwoorrkkss.. | |
| A ezmlm thread is just a message number-ordered set of messages with | |
| identical ``normalized'' subject entries. This is a very reliable | |
| method for threading messages. It does not rely on any variably | |
| present ``In-Reply-To:'' or ``References:'' headers. If the subject | |
| changes, the continuation becomes a separate thread very close to the | |
| original thread in a digest. ezmlm uses this mechanism to return | |
| message sets threaded and with a thread and author index, unless | |
| specifically told not to do so with the ``n'' format specifier. | |
| Naturally, lists set up without a message index (using the ezmlm-make | |
| ``-I'' switch) do not maintain thread information. | |
| 44..2233.. HHooww ddiiggeessttss wwoorrkk.. | |
| A ``digest'' is just an ordered collection of messages from a list, | |
| usually sent out regularly depending on the time and traffic volume | |
| since the last digest. Digest subscribers thus can read messages as | |
| ``threads'' once daily, rather than receiving a constant trickle of | |
| messages. | |
| As a major change in ezmlm-idx-0.30, the digest is no longer a totally | |
| separate ezmlm-list, but a part of the main list. This has security | |
| advantages, makes setup and administration easier, saves space, and | |
| allows a consistent way for subscribers of both ``list'' and ``list- | |
| digest'' to retrieve missed messages from a single archive. | |
| The digest of the list ``list'' is always called ``list-digest''. To | |
| set up a list with a digest, simply use the ezmlm-make(1) ``-d'' | |
| switch. You subscribe to and unsubscribe from a digest the same way as | |
| for the main list, except that the request is sent to e.g. list- | |
| digest-subscribe@host rather than to list-subscribe@host. | |
| Any option such as remote admin or subscription moderation that is | |
| active for the list applies also to the digest list. Any restrictions | |
| in posts or archive retrieval set up for the list, automatically | |
| accept both subscribers of the main list and of the digest list. | |
| The changes in ezmlm-idx>=0.30 allow all programs to service both list | |
| and list-digest functions. All digest-specific files are stored in | |
| DDIIRR//ddiiggeesstt//. Digest list subscriber addresses in | |
| DDIIRR//ddiiggeesstt//ssuubbssccrriibbeerrss// and digest list bounce information in | |
| DDIIRR//ddiiggeesstt//bboouunnccee//. Text files are shared between list and digest. To | |
| get the local part of the list or list-digest name in a context | |
| sensitive manner, use ``<#l#>'' (lower case ``L'') in the text file. | |
| In order to generate digest, the list needs to be archived and indexed | |
| (both default). You can retrieve sets of messages from the message | |
| archive. Such sets are always returned to the SENDER of the request. | |
| ``Digests'' are a special form of such a set/request. First, there are | |
| no restrictions on the number of messages that can be in a digest | |
| (which is balanced by the requirement for a ``digest code'' that needs | |
| to be specified in order to create a digest based on a mailed | |
| request). Second, special files (DDIIRR//ddiiggiissssuuee and DDIIRR//ddiiggnnuumm) keep | |
| track of the digest issue and the message number, amount, and time | |
| when the last digest was created. Thus, the system is adapted to make | |
| it easy to create the regular collections of messages commonly | |
| referred to as ``digests''. | |
| Digest can be generated in several different ways: | |
| CCoommmmaanndd lliinnee | |
| ezmlm-get can be invoked on the command line, or via a script | |
| from e.g. crond(8): | |
| % ezmlm-get DIR | |
| If for some reason the digest should be disseminated via a separate | |
| list, the digest can be redirected to a ``target address'' with the | |
| ezmlm-get(1) ``-t'' switch. This may be useful if a non-standard | |
| digest list name is required. In this case, the list disseminating | |
| the digest must be set up as a sublist of the main list (see ``How | |
| sublists work''). | |
| ffrroomm DDIIRR//eeddiittoorr | |
| This is the default and does not require and additional setup. | |
| It works well with most lists. The only possible advantage is | |
| for very low traffic lists and for lists where it is important | |
| that a digest be sent out at a specific time (as DDIIRR//eeddiittoorr | |
| digests are triggered only when messages are received). | |
| In DDIIRR//eeddiittoorr, ezmlm-get(1) needs to be combined with ezmlm- | |
| tstdig(1) so that digests are generated only if certain criteria | |
| are met (in this case, more than 30 messages, 64 kbytes of | |
| message body or 48 hours since the latest digest). Add these | |
| lines after the ezmlm-send line in DDIIRR//eeddiittoorr: | |
| |/usr/local/bin/ezmlm/ezmlm-tstdig -t48 -m30 -k64 DIR || exit 99 | |
| |/usr/local/bin/ezmlm/ezmlm-get diglist@host DIR || exit 0 | |
| To set this up automatically when you create the list: | |
| % ezmlm-make -d DIR dot local host [code] | |
| Again, the ezmlm-get(1) ``-t'' switch can be used for non-standard | |
| arrangements to redirect the digest. The ezmlm-make(1) ``-4'' | |
| switch can be used to specify alternative ezmlm-tstdig(1) parame- | |
| ters. | |
| ffrroomm DDIIRR//mmaannaaggeerr | |
| This is useful only if you want digests at specific times, and | |
| you do not have access to crond(8) on the list host. ezmlm- | |
| get(1) is in it's normal place in DDIIRR//mmaannaaggeerr before ezmlm- | |
| manage(1), but a digest code is specified in the ezmlm-get(1) | |
| command line. To trigger digests requires a regular trigger | |
| messages generated from e.g. crond(8) (see below), but this can | |
| be done from _any_ host, not only the list host. ezmlm-make(1) | |
| sets up ezmlm-get(1) this way if a digest ``code'' is given as | |
| the 5th ezmlm-make(1) command line argument. However, you need | |
| to set up the trigger messages separately (see below): | |
| % ezmlm-make DIR dot local host code | |
| To also test for message volume with this setup, generate trigger | |
| messages with the granularity you'd like, and add a ezmlm-tstdig(1) | |
| line to DDIIRR//mmaannaaggeerr. E.g., use a trigger message every 3 hours and | |
| the following ezmlm-tstdig(1) line before ezmlm-get(1): | |
| |/usr/local/bin/ezmlm/ezmlm-tstdig -t24 -m30 -k64 DIR || exit 99 | |
| In general, a cron-triggered digest is preferred for very large | |
| lists and for lists with very low traffic. Again, the ezmlm-get(1) | |
| ``-t'' switch can be used for non-standard arrangements to redirect | |
| the digest. For most lists, the digesting from DDIIRR//eeddiittoorr works | |
| very well, and does not require any extra setup work. | |
| CCoommbbiinnaattiioonn sseettuuppss | |
| The default setup in the ezmlmrc(5) file included in the | |
| distribution is the DDIIRR//eeddiittoorr triggered setup described above. | |
| If you in addition use ezmlm-cron(1) or crond(8) directly to | |
| generate trigger messages to list-dig.code@host, you can get | |
| regular digests (via the trigger messages and DDIIRR//mmaannaaggeerr), with | |
| extra digest sent when traffic is unusually high (via the ezmlm- | |
| tstdig/ezmlm-get limits set in DDIIRR//eeddiittoorr). This works best | |
| when the time argument on the ezmlm-tstdig(1) command line is | |
| the same as the trigger message interval, and the other ezmlm- | |
| tstdig(1) parameters are set so that they are only rarely | |
| exceeded within the normal digest interval. | |
| 44..2244.. HHooww WWWWWW aarrcchhiivvee aacccceessss wwoorrkkss.. | |
| If the list is set up with ezmlm-make -i, ezmlm-archive(1) will be | |
| invoked from DDIIRR//eeddiittoorr. This program creates indices for threads, | |
| subjects, and authors under DDIIRR//aarrcchhiivvee from the iinnddeexx files. ezmlm- | |
| cgi(1) is set up per user or globally (see man page) and told about | |
| different lists via the //eettcc//eezzmmllmm//eezzccggiirrcc file. ezmlm-cgi(1) presents | |
| and used the index created by ezmlm-archive(1) and converts these and | |
| the messages to html on-the-fly. To be as efficient as possible, | |
| ezmlm-cgi(1) outputs only basic html. However, style sheets are | |
| supported and can be used to customize formatting without modification | |
| of ezmlm-cgi(1). Extra buttons can be added via the config file. See | |
| man page for details. | |
| 44..2255.. HHooww eezzmmllmm--ttssttddiigg wwoorrkkss.. | |
| ezmlm-tstdig(1) looks at DDIIRR//nnuumm and DDIIRR//ddiiggnnuumm to determine how many | |
| messages and how much traffic (in terms of bytes of message body) has | |
| arrived to the list since the latest digest. It also determines how | |
| much time has passed since the last digest was generated. If any of | |
| the criteria specified by command line switches exists, ezmlm- | |
| tstdig(1) exits 0, causing the invocation of the next line in the | |
| .qmail file. If not, ezmlm-tstdig(1) exits 99 causing qmail to skip | |
| the rest of the .qmail file. ezmlm-tstdig(1) looks at LOCAL to | |
| determine if it is invoked in the command line, in DDIIRR//eeddiittoorr, or in | |
| DDIIRR//mmaannaaggeerr. In the latter two cases, ezmlm-tstdig(1) verifies that | |
| the list local address is correct. If invoked in DDIIRR//mmaannaaggeerr, ezmlm- | |
| tstdig(1) exits 0 for all action requests except list-dig, so that is | |
| does not interfere with the normal functions of ezmlm-get(1) and | |
| ezmlm-manage(1). ezmlm-tstdig(1) uses DDIIRR//ttssttddiigg as a flag to avoid | |
| problems caused by starting the program when another copy is already | |
| running. | |
| ezmlm-make(1) automatically configures ezmlm-tstdig(1) with the | |
| parameters ``-t48 -m30 -k64'', which can be overridden with the ``-3'' | |
| switch. | |
| 44..2266.. HHooww ssuubblliissttss wwoorrkk.. | |
| ezmlm uses the concept of sublists. Sublists are regular ezmlm lists, | |
| except that they only accept messages from their parent list, which is | |
| placed in the file DDIIRR//ssuubblliisstt. | |
| sublists are used to split the load of a large mailing list among | |
| several hosts. All you need to do to set up a local sublist of e.g. | |
| the qmail@list.cr.yp.to list is to create a ezmlm list, and put | |
| ``qmail@list.cr.yp.to'' into DDIIRR//ssuubblliisstt of you list, and subscribe | |
| the sublist to the main qmail list. Now anyone can subscribe to your | |
| local list which handles its own bounces, subscribe requests, etc. | |
| The load on the main list is only the single message to your local | |
| list. | |
| Sublists will not add their own mailing list header and they will not | |
| add a subject prefix. Normally, sublists will use their own message | |
| number, rather than that used by the main list. With ezmlm-idx>=0.23, | |
| sublists that are not archived and not indexed, will instead use the | |
| main list message number. This way, bounce messages from the sublist | |
| can refer the subscriber to the main list archive. This is not done | |
| for indexed/archived sublists for security reasons (an attacker could | |
| overwrite messages in the sublist archive). | |
| With ezmlm-idx>=0.31, there is support for using ezmlm as a sublist of | |
| a mailing list run by another mailing list manager. To set this up, | |
| set up a normal ezmlm sublist, then edit DDIIRR//eeddiittoorr so that the _e_z_m_l_m_- | |
| _s_e_n_d line contains the command line option ``--hh _X_-_L_i_s_t_p_r_o_c_e_s_s_o_r_- | |
| _V_e_r_s_i_o_n_:'' (before DDIIRR). As the header text, you need to use a header | |
| that the main list manager adds to messages. Now your sublist will | |
| accept only messages from the main list requiring that they come from | |
| that list _a_n_d contain the header specified. | |
| ezmlm-idx>=0.313 also has added protection against the malicious | |
| subscription of the ezmlm list to mailing lists run by other list | |
| managers. If the ezmlm-reject(1) line in DDIIRR//eeddiittoorr has ``-h'' and | |
| ``DDIIRR'' on it, ezmlm-reject(1) will read DDIIRR//hheeaaddeerrrreejjeecctt and reject | |
| messages that have any header specified in that file. See the ezmlm- | |
| reject(1) man page for suitable headers. | |
| 44..2277.. HHooww ssuubblliissttiinngg ccaann bbee mmaaddee ttrraannssppaarreenntt ttoo tthhee uusseerr.. | |
| Often you create a local sublist of a list that you do not control. | |
| Local users know to subscribe to your local list. However, | |
| occasionally, you want to run your own list as a main list and a | |
| series of sublists per geographic site, or split onto several hosts if | |
| the list is too large to be handled by a single computer. You may also | |
| want to split the load of a ``well known'' list host that is getting | |
| overwhelmed with traffic. ezmlm supports sublists, but here the fact | |
| that the user has to interact with the correct sublist is a problem. | |
| What if the user doesn't remember which sublist s/he is subscribed to? | |
| What if you change the name of a sublist host or move a sublist to a | |
| different host? | |
| ezmlm-idx&-0.32 adds ezmlm-split(1), which allows sublisting | |
| transparent to the user. This program is invoked before ezmlm- | |
| manage(1) in DDIIRR//mmaannaaggeerr. If it detects a subscribe or unsubscribe | |
| command, it will forward the command to the appropriate sublist based | |
| on a ``split file'' DDIIRR//sspplliitt. This file contains entries, one per | |
| line, of the format: | |
| domain:lo:hi:sublistname@sublisthost | |
| edu:::othersub@otherhost | |
| :1:26:third@thirdhost | |
| For each address, a hash in the range 0-52 is calculated. The | |
| ``domain'' is the last two parts of the host name, reversed. Thus, for | |
| id.wustl.edu it would be ``edu.wustl''. The domain is considered to | |
| match if the characters in the split file match. It is advisable to | |
| use only the last part of the domain for compatibility with the SQL | |
| version version (see section ``ezmlm support for SQL datbases''). | |
| Thus, any address *@*.domain with a hash between ``lo'' and ``hi'' | |
| inclusive would match the first line and be forwarded to | |
| sublistname@sublisthost. *@*.edu (independent of hash) would match | |
| the second line and be forwarded to othersub@otherhost. Of remaining | |
| requests, a request for any target address with a hash between 1 and | |
| 26 would be forwarded to the sublist third@thirdhost. Remaining | |
| requests would be passed on to the local list. | |
| The domain is useful for ``geographic'' splitting, and the hash for | |
| load splitting (within a domain). The user interacts only with the | |
| main list, and does not need to know from which sublist s/he is | |
| serviced. | |
| ezmlm-idx sublists use the message number of the main list message if | |
| they are not indexed. This allows sublists to in bounce messages refer | |
| the subscriber to the main list archive. Use ezmlm-make(1) in | |
| conjunction with ezmlmsubrc(5) to set up the sublists. See man pages | |
| for further details. | |
| Since the addresses are stored locally, the system is very fast and | |
| robust, but it is difficult to add new sublists. ezmlm-split(1) -D | |
| supports parsing addresses on stdin and splitting them to stdout (see | |
| man page). Thus, if you divide the domain of some sublist(s) onto a | |
| net set of sublists, you can use ezmlm-list(1) to collect the | |
| addresses, ezmlm-split -D with the new split file to split them, then | |
| after clearing the local subscriber databases use ezmlm-sub(1) to add | |
| the correct addresses to each new sublist. The section on SQL support | |
| describes an alternative way of managing sublists (see section ``ezmlm | |
| support for SQL datbases''). | |
| 44..2288.. HHooww ttoo sseerrvviiccee ccoommmmaannddss iinn tthhee ssuubbjjeecctt lliinnee.. | |
| Rfc2142 (standards track) says that for each mailing list list@host, | |
| there MUST be an administrative address list-request@host. This is not | |
| the default for ezmlm, but can be added with ezmlm-make(1) ``-q'', | |
| which adds a ezmlm-request(1) line before the ezmlm-manage(1) line in | |
| DDIIRR//mmaannaaggeerr. This address is used to manage commands in the | |
| ``Subject:'' line, by translating them into appropriate ezmlm command | |
| messages. | |
| When migrating from other mailing list managers which use this method | |
| to issue list commands, configuring ezmlm to respond to such commands | |
| may be useful. In addition, some software manufacturers sell MUAs and | |
| mail gateways that are unable to correctly transport rfc822-compliant | |
| Internet mail with certain characters in the local part of the | |
| address. | |
| ezmlm-request(1) services the list-request@host address per rfc2142 | |
| (standards track). It is usually invoked in DDIIRR//mmaannaaggeerr before ezmlm- | |
| get(1) and ezmlm-manage(1). It ignores all requests that are not for | |
| the list-request address. For requests to the list-request@host | |
| address, ezmlm-request(1) parses the ``Subject:'' line. If a ezmlm | |
| command address starting with the contents of DDIIRR//oouuttllooccaall (e.g. list- | |
| get45) is on the command line, ezmlm-request(1) generates the | |
| corresponding full ezmlm request message. If the subject does not | |
| start with the contents of DDIIRR//oouuttllooccaall, ezmlm-request(1) prefixes the | |
| line with the contents of DDIIRR//oouuttllooccaall, thereby building a complete | |
| ezmlm command. If a host name is specified, it must match the contents | |
| of DDIIRR//oouutthhoosstt, i.e. ezmlm-request(1) in this function will only | |
| generate command messages for the local list. | |
| Thus, a subject of ``subscribe'' to list-request@host will be auto- | |
| magically rewritten as a message to list-subscribe- | |
| userlocal=userhost@host. Similarly, any ezmlm command or ``Reply- | |
| To:'' address can be pasted into the subject field and sent to list- | |
| request@host. ezmlm-request(1) does not validate the command name, | |
| but invalid commands result in a ``help'' message in reply via ezmlm- | |
| manage(1). This allows ezmlm-request(1) to also service custom | |
| commands, like list-faq@host that you may have created for your list. | |
| If the ``Subject:'' is empty or does not start with a letter, ezmlm- | |
| request(1) will attempt to interpret the first message body line that | |
| starts with a letter in the first position. | |
| When ezmlm-request(1) has successfully processed a ''request'' | |
| command, it exits 99 to skip the rest of DDIIRR//mmaannaaggeerr. | |
| To set up a list to include ezmlm-request processing, use the ezmlm- | |
| make(1) ``-q'' switch. The default is to not do this. | |
| 44..2299.. HHooww ttoo ssuuppppoorrtt aalltteerrnnaattiivvee ccoommmmaanndd nnaammeess.. | |
| ezmlm-idx>=0.23 allows alternate names for all user commands. This can | |
| be used to e.g. make a message to list-remove@host to result in an | |
| ``unsubscribe'' action. This may help migration from other mailing | |
| list managers and in non-English environments. The use of aliases | |
| allows ezmlm to respond to new command names, while always responding | |
| correctly to the standard commands. If ezmlm-request(1) is used it | |
| will automatically be able to deal with any commands you set up for | |
| the list, within ezmlm or as separate programs. See ``Multiple | |
| language support'' on how to set up command aliases. | |
| 44..3300.. HHooww ttoo aadddd yyoouurr oowwnn ccoommmmaannddss.. | |
| The qmail/ezmlm mechanism makes it very easy to add your own commands. | |
| You can add them to DDIIRR//mmaannaaggeerr, but this requires great care in terms | |
| of ordering and exit codes. Easier is to set them up separately with a | |
| ..qqmmaaiill--lliisstt--ccoommmmaanndd file. | |
| Let's assume you want to allow anyone to determine how many | |
| subscribers are subscribed to your list with the command list- | |
| count@host. Just create a program to do the work: | |
| #!/bin/sh | |
| DTLINE='Delivered-To: list-count@host processor' | |
| grep "$DTLINE" > /dev/null && | |
| { echo "This message is looping"; exit 100; } | |
| { | |
| echo "$DTLINE" | |
| cat <<EOF | |
| From: list-help@host | |
| To: $SENDER | |
| Subject: list@host subscriber count | |
| Current number of subscribers: | |
| EOF | |
| ezmlm-list ~/DIR | wc -l | |
| } | /var/qmail/qmail-inject -f list-return- "$SENDER" | |
| exit 0 | |
| Then, create DDIIRR//ccoouunntt containing ``|/path/program'' and then do ``ln | |
| -sf DIR/count ~/.qmail-list-count''. Now, the command will pass the | |
| message to ``program''. The first thing ``program'' looks for is its | |
| delivered-to line to detect looping. If not found, it goes on to print | |
| this header, followed by some minimal text and the subscriber number. | |
| This can of course be made prettier with ezmlm-list error checking, | |
| and maybe in perl, but shows how easy it is to extend ezmlm. All | |
| thanks to the DJB/qmail delivery mechanism. | |
| 44..3311.. HHooww rreemmoottee aaddmmiinniissttrraattoorrss ccaann rreettrriieevvee aa ssuubbssccrriibbeerr lliisstt | |
| A user with shell access can always manipulate subscriber lists with | |
| ezmlm-sub(1), ezmlm-unsub(1), and ezmlm-list(1) for the lists s/he | |
| owns. | |
| Sometimes a remote administrator requires a list of subscriber E-mail | |
| addresses. At the same time, the list should be kept out of the hands | |
| of spammers and all unauthorized entities. By default, ezmlm does not | |
| allow remote subscriber list retrieval. You can enable the ``-list'' | |
| command for remote retrieval of a subscriber list by using the ezmlm- | |
| make(1) ``-l'' switch or by adding the ``-l'' switch to the ezmlm- | |
| manage(1) line in DIR/manager. With this switch, ezmlm will permit | |
| retrieval of a subscriber list, but only to remote administrators. | |
| Subscribers cannot get the list membership, and any outsider would | |
| have to be able to read a remote administrator's mail to get the list. | |
| _N_o_t_e_: _T_h_i_s _o_p_t_i_o_n _i_s _n_o_t _f_u_n_c_t_i_o_n_a_l _u_n_l_e_s_s _t_h_e _l_i_s_t _i_s _c_o_n_f_i_g_u_r_e_d _f_o_r | |
| _r_e_m_o_t_e _a_d_m_i_n_i_s_t_r_a_t_i_o_n_, _i_._e_. _t_h_e _e_z_m_l_m_-_m_a_k_e_(_1_) _`_`_-_r_l_'_' _s_w_i_t_c_h_e_s _n_e_e_d _t_o | |
| _b_o_t_h _b_e _u_s_e_d_. | |
| The list returned is unsorted for efficiency reasons. You can easily | |
| sort it or use your mail reader to find a specific entry. The number | |
| of subscribers is shown at the bottom of the list. To get the number | |
| of subscribers from the command line, use: | |
| % ezmlm-list DIR | wc -l | |
| 44..3322.. HHooww rreemmoottee aaddmmiinniissttrraattoorrss ccaann ddeetteerrmmiinnee tthhee nnuummbbeerr ooff ssuubb-- | |
| ssccrriibbeerrss | |
| For the list aaa@example.com, send a message to aaa-listn@example.com. | |
| This is preferable to the ``-list'' command for very large lists. | |
| 44..3333.. HHooww rreemmoottee aaddmmiinnss ccaann sseeee iiff aann aaddddrreessss iiss aa ssuubbssccrriibbeerr oorr nnoott | |
| For the list aaa@example.com, and subscriber user@host.cn send a | |
| message to aaa-query=host.cn@example.com. Users can do this as well, | |
| but in that case the reply is sent to the target address | |
| (user@host.cn) and not to the SENDER to protect the subscriber | |
| addresses. | |
| 44..3344.. HHooww rreemmoottee aaddmmiinniissttrraattoorrss ccaann sseeaarrcchh tthhee ssuubbssccrriippttiioonn lloogg | |
| The same conditions that enable remote administrators to retrieve a | |
| subscriber list (see ``'') also enable the remote admin to retrieve | |
| the subscription log, i.e. the log of changes made to the subscriber | |
| list. The command is list-log@host. The entries are of the form ``date | |
| timestamp dir event address comment''. ``dir'' is ``+'' for addition | |
| of an address, ``-'' for removal, ``event'' is empty for normal | |
| (un)subscribe ``manual'' for changes made with ezmlm-(un)sub, and | |
| ``probe'' for removals via bounce handling. ``address'' is the | |
| subscription address, and ``comment'' is empty or the subscribers | |
| ``From:'' line. The log can be used to look at recent | |
| additions/removals and to try to track down a subscriber address from | |
| e.g. the name on the ``From:'' line. The log is written on a best- | |
| effort basis. In contrast to the subscriber database, entries in the | |
| log may be lost at a system crash. | |
| The remote administrator can do a case-insensitive search through the | |
| log with the command list-log.xxx@host, where ``xxx'' is any sequence | |
| of letters/numbers that must occur on a line in order for that line to | |
| be included in the reply. A ``_'' is a wild card and should be used | |
| for special characters as well. Thus, to search for any entry with a | |
| host name of host* mail list-log._host and to find entries for ``Keith | |
| John...'' etc, use list-log.keith_john. | |
| For SQL-enabled lists, this command searches the ``list_slog'' table. | |
| 44..3355.. HHooww tteexxtt ffiillee eeddiittiinngg wwoorrkkss.. | |
| If a list is set up with the ezmlm-make(1) ``-n'' switch, or if the | |
| ``-e'' switch is added to the ezmlm-manage(1) line in DDIIRR//mmaannaaggeerr, | |
| ezmlm allows remote administrators to edit the text files that make up | |
| most of the ezmlm responses. Of course, this will work only if remote | |
| administration is enabled for the list. Replies are sent only if the | |
| target address is a remote administrator. Thus, ezmlm does not rely | |
| on SENDER (easily forged) but on the notion that only the recipient | |
| receives the message. This is a reasonable assumption for remote | |
| administrators that receive mail on the local system. | |
| With this switch, ezmlm replies to the -edit command with a list of | |
| the files in DDIIRR//tteexxtt//. Only files where editing seems reasonable are | |
| included in the list. The remote administrator can edit any file in | |
| DDIIRR//tteexxtt// by sending e-mail containing the new text to -edit.file | |
| where ``file'' is the name of the file replaced (edited). The file | |
| must exist and the name consist of only lower case letters and '-'. | |
| Any '-' (hyphen) must be substituted by a '_' (underscore). For remote | |
| administrator convenience, the substitution has been made in the list | |
| of files sent in reply to the -edit command. | |
| In reply to this command, ezmlm sends a message with the file and | |
| editing instructions. A ``cookie'' based on the date, file name, and | |
| contents of the file is added to the ``Reply-To:'' address. The cookie | |
| becomes invalid as soon as the file has been changed, or after 27 | |
| hours, whichever is shorter. Also, the cookie cannot be used to edit | |
| any other file, even if the other file has exactly the same contents. | |
| If you sent an edit request, and decide not to edit the file, you can | |
| simply delete the message. | |
| To apply standard changes to all your text files it is easier to edit | |
| ~~//..eezzmmllmmrrcc. To reset the list's text files back to their default | |
| contents (as specified by eezzmmllmmrrcc((55))), use the ezmlm-make(1) ``-ee'' | |
| switch together with any other switches used to set up the list, or | |
| the ``-++'' switch and any switches that you whish to change from the | |
| current configuration. | |
| 44..3366.. HHooww ssuubbjjeecctt lliinnee pprreeffiixxeess wwoorrkk.. | |
| First of all, it is against a number of RFCs to modify the | |
| ``Subject:'' header of messages. However, it is frequently requested | |
| by users who have seen it on other list managers. Second, it is many | |
| times worse to have a prefix that changes from message to message, | |
| such as a prefix with the message number. However, a number of lists, | |
| especially in Japan, use this feature and in its absence these lists | |
| might be unable to take advantage of ezmlm. Thus, while we recommend | |
| against using a prefix, ezmlm-idx supports it. | |
| To add a subject prefix, just put the text into DDIIRR//pprreeffiixx. The only | |
| format that makes any sense is ``list:'' or ``(list)'' or such. | |
| The message number prefix is activated by putting e.g. ``(list-#)'' | |
| into DDIIRR//pprreeffiixx. ``#'' is replaced by the message number. ezmlm | |
| refuses to make more drastic changes in the subject of a message. As a | |
| consequence, the message number prefix is added only when the subject | |
| does not already contain a prefix. Thus, replies will have the message | |
| number of the original message. Doing anything else and still | |
| supporting rfc2047-encoded subjects in the archive threading (much | |
| more important) would require decoding the subject, removing/editing | |
| the prefix, and re-encoding the subject. This is far too invasive. | |
| The entire thread can always be retrieved by sending a message to | |
| list-thread-x where ``x'' is the message number in the prefix of any | |
| message in the thread. | |
| 44..3377.. HHooww bboouunncceess aarree hhaannddlleedd.. | |
| Ezmlm messages are sent with an envelope sender (``Return-Path'') that | |
| directs bounces to DDIIRR//bboouunncceerr and also via ``VERP'' contain | |
| information about the intended recipient. Thus, programs run from | |
| DDIIRR//bboouunncceerr know the subscriber for whom the message bounced. ezmlm- | |
| weed(1) is used to weed out delivery delay notification and other | |
| junk. For others ezmlm-return(1) decides if the address is a | |
| subscriber. If so, it saves the first bounce message and a list of | |
| bounced-message numbers. ezmlm-warn(1) executed from e.g. DDIIRR//eeddiittoorr | |
| goes through these bounce files. If it finds any that are older than | |
| 1,000,000 seconds (about 11.6 days) it sends a warning message to the | |
| subscriber. If this warning message bounces, ezmlm-return(1) sets up a | |
| "warning flag" for the subscriber. If ezmlm-warn(1) finds a warning | |
| flag older than 11.6 days, it sends a "probe" to the subscriber. If | |
| ezmlm-return(1) receives a bounced probe, the subscriber is | |
| automatically unsubscribed. | |
| The ezmlm-warn(1) ``-t'' switch can be used to change the time-out (in | |
| days). The ezmlm-warn(1) ``-d'' switch causes processing of ``list- | |
| digest'' bounces rather than ``list'' bounces. ezmlm-weed(1) and | |
| ezmlm-return(1) can handle bounces for either list. | |
| ezmlm-warn(1) also removes any files in the bounce directory that are | |
| older than 3 times the bounce time-out. | |
| ezmlm-warn(1) is normally run from DDIIRR//eeddiittoorr. This can take quite a | |
| lot of resources, if there are a large number of bouncing addresses | |
| (>>1000) on a busy list, since by default all bounces are stored in a | |
| single directory and ezmlm-warn(1) examines all of them with each | |
| invocation. ezmlm-idx->=0.32 changes bounce handling to improve | |
| performance for large lists. Bounces are stored in subdirectories of | |
| DDIIRR//bboouunnccee//dd//, one per 10,000 seconds. The corresponding address | |
| hashes are stored in 16 subdirectories of DDIIRR//bboouunnccee//hh//. Instead of | |
| looking at all bounces, ezmlm-warn(1) processes only the bounces in | |
| DDIIRR//bboouunnccee//dd// subdirectories that are ``due''. In addition, ezmlm- | |
| warn(1) uses DDIIRR//bboouunnccee//llaassttdd as a simple lockout, to assure that it | |
| will do work only at most once every 5.5 hours. (Times are scaled to | |
| the ezmlm-warn(1) ``-t'' argument if used.) Together, these changes | |
| assure that bounce handling will scale well in the default | |
| configuration, even for very large lists. | |
| 44..3388.. HHooww tthhee iinnffoo aanndd ffaaqq ccoommmmaannddss wwoorrkk.. | |
| The _-_i_n_f_o and _-_f_a_q commands simply reply with the contents of the | |
| DDIIRR//tteexxtt//iinnffoo and DDIIRR//tteexxtt//ffaaqq files. Edit these files directly or | |
| remotely (see ``How to remotely edit dir/text files''). The | |
| DDIIRR//tteexxtt//iinnffoo file should start with a single line that is meaningful | |
| as is and describes the list. This will be used in later versions to | |
| allow automatic assembly of the global ``list-of-lists'' (see ``How to | |
| set up a global list address like majordomo@host or listserv@host''). | |
| 44..3399.. HHooww tthhee gglloobbaall eezzmmllmm lliisstt aaddddrreessss wwoorrkkss.. | |
| Sometimes, it is desirable to have a host- or user-wide address that | |
| can list available mailing lists. | |
| ezmlm-request(1) can be used to set up a global address, such as | |
| ezmlm@host which allows the user to see and interact with a number of | |
| different mailing lists. This is especially useful when your users are | |
| used to other mailing list managers, such as ``majordomo'' or | |
| ``listproc''. ezmlm-request(1) is set up to answer requests to the | |
| address (see ``How to set up a global list address like majordomo@host | |
| or listserv@host''). There, it interprets the first line of the | |
| message body as a command. It will reply directly to ``lists'' and | |
| ``which'' commands. All other commands will be used to construct | |
| messages to the respective lists. Where other mailing list managers | |
| use synonyms of ezmlm commands, ezmlm-request(1) recognizes these and | |
| translates them to the corresponding ezmlm commands. ezmlm-request(1) | |
| will build commands also of unrecognized commands. Thus, if you create | |
| new commands for a list, ezmlm-request(1) will automatically support | |
| them. | |
| If the user does not specify the complete list address, ezmlm- | |
| request(1) will attempt to complete the name. See the ezmlm-reject(1) | |
| man page for more info. | |
| 44..4400.. HHooww eezzmmllmm--ccrroonn wwoorrkkss.. | |
| If you are a user and have crond(8) access, if you do not need to get | |
| digests at specific times, or if you are a system administrator | |
| setting up lists, there is no reason for you to use ezmlm-cron(1). If | |
| you are a system administrator not allowing users crond(8) access or a | |
| user that needs digests at specific times, but without crond(8) | |
| access, read on. | |
| ezmlm-cron(1) is a very restrictive interface to crond(8). ezmlm- | |
| cron(1) can be used to create digest trigger messages. If a list is | |
| set up with a digest code (see ezmlm-make(1) and ezmlm-get(1)) ezmlm | |
| will generate a digest from the list joe-sos@host sent to to | |
| subscribers of joe-sos-digest@dighost when receiving a message to joe- | |
| sos-dig-code@host where ``code'' is the digest code. ezmlm-cron(1) can | |
| be used to generate such messages at regular intervals. The file | |
| eezzccrroonnrrcc is set up by the sysadmin and controls what trigger messages | |
| specific users may set up via ezmlm-cron(1). | |
| Usually, the ezcronrc of that use will have an entry like | |
| ``user:user-:host:10'' allowing ``user'' to create trigger messages | |
| for up to 10 lists with names starting with ``user-'' and on the host | |
| ``host''. | |
| To list the ezcronrc line controlling your use of ezmlm-cron(1): | |
| % ezmlm-cron -c | |
| To list all entries that you've created: | |
| % ezmlm-cron -l | |
| To add an entry to trigger digests from list@host every morning at | |
| 0230: | |
| % ezmlm-cron -t 02:30 -i24 list@host code | |
| A new entry for the same list overwrites an old entry. | |
| To delete the entry above: | |
| % ezmlm-cron -d list@host | |
| or use ezmlm-cron to trigger messages at a different time: | |
| % ezmlm-cron -t 16:16 -i24 list@host code | |
| 44..4411.. HHooww eezzmmllmm--mmaakkee wwoorrkkss.. | |
| ezmlm lists allow almost infinite customization. The component build, | |
| together with the qmail delivery mechanism makes it possible to create | |
| any variant of list function imaginable. However, this complexity | |
| makes it somewhat daunting to the average user wanting to set up a | |
| mailing list. ezmlm-make(1) allows automated list setup, while | |
| permitting a large amount of configurability. | |
| At first glance, ezmlm-make(1) has many complicated options. However, | |
| these can be applied iteratively through the ezmlm-make(1) edit | |
| mechanism. Also, they are intended to be relatively complete so that | |
| execution of ezmlm-make(1) by e.g. a GUI can be used to safely set up | |
| and edit any list. | |
| ezmlm-make(1) reads its command line arguments and switches, then | |
| creates the list directory. If the ``-e'' edit or ``-+'' sticky edit | |
| switches are not specified, ezmlm-make(1) will fail if the directory | |
| already exists. The directory argument must be an absolute path | |
| starting with a slash. The dot-qmail file argument, if specified, must | |
| also be absolute. | |
| ezmlm-make(1) next reads ezmlmrc(5) located in the //eettcc// directory | |
| with a default install. If not found, the file in the ezmlm binary | |
| directory will be used. The second ezmlm-make command line argument | |
| specify the root name of the .qmail files. If the ezmlm-make(1) ``-c'' | |
| switch is used, ezmlm-make(1) will look in that directory for a | |
| ..eezzmmllmmrrcc file and use it instead. If this file does not exist, ezmlm- | |
| make(1) will print a warning and use the previously discussed | |
| ezmlmrc(5) files in the same order. You can also use ``-C | |
| _e_z_m_l_m_r_c_._a_l_t'' to use _e_z_m_l_m_r_c_._a_l_t as the ezmlmrc(5) file. Again, ezmlm- | |
| make(1) will fall back to the others with a warning, if the specified | |
| ezmlmrc(5) file is not found. | |
| When not run in ``-e edit'' or ``-+'' sticky edit modes, ezmlm-make(1) | |
| first creates the list directory. It also as the last step of its | |
| action creates DDIIRR//kkeeyy containing the key used for cookie generation. | |
| The ezmlmrc(5) file consists of a number of file names relative to the | |
| list directory, followed by conditional flags (see ezmlm-make(1) and | |
| ezmlmrc(5) for details). If all the conditional flags (controlled by | |
| the corresponding command line switches) are true, the lines that | |
| follow are entered into the named file. There are also tags to erase | |
| files. Tags in the format <#X#> (where ``X'' is any number, except | |
| ``1'' and ``2'') are replaced by the corresponding ezmlm-make(1) | |
| switch argument. The ezmlm-make(1) command line arguments and the | |
| ezmlm binary path can be similarly substituted into the text. Thus, | |
| ezmlmrc(5) controls (within reason) the entire operation of ezmlm- | |
| make(1). ezmlmrc(5) is also set up so that no messages or file | |
| containing list state information are lost. Therefore, ezmlm-make(1) | |
| can be used to safely edit existing lists. The only caveat is that the | |
| list state is undefined while editing is in progress. Thus, it is | |
| advisable to prevent mail delivery by setting the ``sticky'' bit on | |
| the user's home directory while editing lists. | |
| ezmlm-make(1) will create the file DDIIRR//ccoonnffiigg. This files saves all | |
| the flags that were set at the last execution of ezmlm-make, as well | |
| as all the switch and command line arguments. When editing a list, | |
| only ``DIR'' and the non-default letter switches need to be specified. | |
| Other command line arguments and the ``digit switch'' arguments are | |
| read from DDIIRR//ccoonnffiigg. To remove a digit switch, simply use it with | |
| two single quotes as the argument. | |
| You can also easily determine how a list was set up by looking at | |
| DDIIRR//ccoonnffiigg. | |
| _N_o_t_e_: DDIIRR//tteexxtt// files will be created but not overwritten when using | |
| the ``-e'' or ``-+'' edit switches. This is to preserve manual | |
| customizations. To overwrite these and reset the files to the content | |
| specified by eezzmmllmmrrcc, use ``-ee'' or ``-++''. | |
| _N_o_t_e_: As of ezmlm-idx-0.40 the ezmlm-make(1) ``-c'' and ``-C file'' | |
| switches are sticky when using ``-+'' or ``-++'', so you do not need | |
| to specify them. This feature is disabled if ezmlm-make(1) is run as | |
| root. | |
| 44..4422.. WWhhaatt nnaammeess ccaann II uussee ffoorr mmyy lliissttss?? | |
| Rather than restrict you to a single E-mail address (user@host), qmail | |
| in the default setup gives you control over an infinite number of | |
| addresses user-*@host. Of course, you (normally) have no way of | |
| controlling elsewhere@host since that could lead to overlap between | |
| users' ``e-mail address space''. As a consequence, all you mailing | |
| lists have to be named user-xx@host where ``user'' is your user name | |
| and ``xx'' is anything. You cannot create e.g. mylist@host, only user- | |
| mylist@host. To create the list user-list@host do: | |
| % ezmlm-make ~/list ~/.qmail-list user-list host | |
| Notice that ``user'' is nnoott part of the ..qqmmaaiill file name. | |
| There are two way to create lists with names not starting with your | |
| user name: First, qmail can be set up so that you control a virtual | |
| domain (see below). Second, the system administrator can set up lists | |
| with arbitrary names within the ~~aalliiaass// directory. | |
| 44..4433.. LLiissttss iinn vviirrttuuaall ddoommaaiinnss | |
| If you use qmail>=1.02 and ezmlm-idx>=0.32, lists under virtual | |
| domains work just like other lists and require no adjustments. You can | |
| choose any local name for the list and the ezmlm-make(1) argument | |
| ``local'' is that name; ``host'' is the name of the virtual domain. | |
| 44..4444.. HHooww ddoo II mmaakkee ccuussttoommiizzaattiioonn ssiimmppllee ffoorr mmee//mmyy uusseerrss?? | |
| All non-default switches, ezmlm-issubn(1) setups, etc, can be made | |
| standard for new lists by customizing the ezmlm-make(1) configuration | |
| file named ``eezzmmllmmrrcc''. A default eezzmmllmmrrcc((55)) is installed in the | |
| ezmlm binary directory. If installed, a system-wide customized ezmlmrc | |
| file in //eettcc//eezzmmllmmrrcc (or symlinked from there) overrides this. | |
| Installing a ~~//..eezzmmllmmrrcc file in a user ddoottddiirr and using the ezmlm- | |
| make(1) ``-c'' switch allows further per user customization (see | |
| ``Customizing ezmlm-make operation''). | |
| 55.. eezzmmllmm ssuuppppoorrtt ffoorr SSQQLL ddaattaabbaasseess.. | |
| 55..11.. WWhhyy uussee aann SSQQLL ddaattaabbaassee wwiitthh eezzmmllmm?? | |
| The main advantages are that you are using an address database system | |
| that can easily be accessed from any number of other programs via | |
| ODBC, perl, java, PHP, ... You can easily hook up ezmlm with your | |
| customer database, etc. ezmlm programs compiled with SQL support (and | |
| when available also those compiled with support for other SQL servers) | |
| are entirely backwards compatible. You can mix SQL dbs with normal | |
| ezmlm dbs, and convert lists between them. | |
| 55..22.. WWhhyy nnoott ttoo uussee aann SSQQLL ddaattaabbaassee wwiitthh eezzmmllmm.. | |
| The main disadvantages of the SQL version are that you need to be | |
| familiar with the SQL server, the binaries are quite a bit larger, and | |
| you are trusting your addresses to a large database program, rather | |
| than a small and easily audited set of ezmlm programs. Also, the SQL | |
| server becomes a single point of failure. | |
| Ezmlm with SQL support continues to rely on qmail stability. If | |
| connection fails, ezmlm aborts with a temporary error causing | |
| redelivery at a later time point. | |
| 55..33.. TTaabblleess uusseedd ffoorr ((MMyy))SSQQLL ssuuppppoorrtt.. | |
| The basic philosophy is that the database can be on any host (if you | |
| use SENDER restrictions, connectivity to the main host is more | |
| important than to the sublists), and you choose the database and | |
| ``table root'' names. The default database is ``ezmlm'' and the | |
| default table root is ``list''. Each list has a separate table root. | |
| Any number of lists can share a database. | |
| The main list address table is named with the table root only, others | |
| have that name with various suffixes. In the following ``list'' is | |
| used as the table root. | |
| 55..33..11.. AAddddrreessss ttaabblleess.. | |
| lliisstt | |
| List subscriber addresses. | |
| lliisstt__ddiiggeesstt | |
| Digest list subscriber addresses. | |
| lliisstt__aallllooww | |
| List subscriber alias addresses. Used only if SENDER | |
| restrictions are used for the list. This is configured in the | |
| default SQL list setup, but a local (ezmlm-style non-SQL) | |
| database could also be used. | |
| lliisstt__ddeennyy | |
| List deny addresses. This table is created, but the default | |
| configuration, if it uses the ``deny'' addresses at all, will do | |
| so with a local database. | |
| lliisstt__mmoodd | |
| Moderator addresses. Created for completeness, but not used in | |
| the default configuration. If moderators are used, the addresses | |
| are stored in a local database. | |
| 55..33..22.. SSuubbssccrriibbeerr lloogg ttaabblleess.. | |
| For each of the above tables, there is a ``*_slog'' table that | |
| contains one row per transaction against the corresponding address | |
| table. The entries contain a time stamp, the subscription address; a | |
| direction indicator (``-'' for removals, ``+'' for additions); a type | |
| indicator (blank for ezmlm-manage, ``m'' for ``manual'', ``p'' for | |
| ``probe, i.e. bounce handling; and the subscriber ``From:'' line | |
| contents (only additions and only when made by ezmlm-manage or by | |
| ``ezmlm-sub(1) -n''). | |
| 55..33..33.. MMeessssaaggee llooggggiinngg ttaabblleess.. | |
| For both the list and the digest list, there are a pair of tables that | |
| log messages: | |
| lliisstt__ccooookkiiee | |
| The main list stores the message number and a pseudo-random | |
| cookie in this table when it processes the message. The cookie | |
| is derived from the secret DDIIRR//kkeeyy, the message sender and the | |
| message number. Thus, it is non-repeating and virtually | |
| impossible to guess beforehand. Sublists will check that the | |
| cookie sent with the message is the same as the one received | |
| with the message. | |
| The digest list is created similarly, except that it is ezmlm- | |
| get(1) that originates the message and creates the cookie. This | |
| is done in ``list_digest_cookie''. | |
| lliisstt__mmlloogg | |
| Both the main list and the sublists make entries in this table. | |
| Each entry consists of a time stamp, a message number, a list | |
| number, and a code. The code is 0 for message arrival, 1 for | |
| ``finished processing'', 2 for ``receipt received'' and -1 for | |
| bounce. The lists will refuse to process messages that do not | |
| have the correct cookie, or if the message already has an entry | |
| with a code of greater than 0. To inject a message at the | |
| sublist, an attacker would have to inject a message with the | |
| correct code before the list has processed the ``real'' message, | |
| or subvert the SQL server. In practice, this is very hard to do, | |
| unless the attacker has broken security at the database server | |
| or a sublist. This authentication mechanism is intended to make | |
| it safe to sublist moderated lists. It also blocks any message | |
| duplication between main list and sublist from being propagated | |
| to the subscribers. | |
| The codes 2 for ``receipt received'' and -1 for bounce are | |
| entered by ezmlm-receipt(1) at the main list. This program is | |
| configured instead of ezmlm-return(1) if the main list was set | |
| up with ``ezmlm-make -w6''. ezmlm-receipt(1) checks the cookie | |
| of messages addresses to mainlocal-return-receipt@mainhost and | |
| if correct enters the ``receipt received'' code. This address is | |
| normally in the subscriber database with a hash of 98, so that | |
| each list sends a message to the address _a_f_t_e_r all subscriber | |
| addresses. | |
| Bounces of sublist messages should not lead to removal of the | |
| sublist from the database. ezmlm-receipt(1) will instead log the | |
| bounce to the ``list_mlog'' table. It will also store up to 50 | |
| bounces in the bounce directory. This helps error detection and | |
| diagnosis. After the first 50 bounces, no more bounces are | |
| stored, until you manually remove the old ones. This is to | |
| prevent filling up your hard disk in case a configuration error | |
| causes a deluge of bounces. | |
| The digest list is treated in the same manner. Here, the tables | |
| is ``list_digest_mlog'' and the feedback address is mainlocal- | |
| digest-return-receipt@mainhost. | |
| 55..44.. HHooww ttoo sseett uupp aa ssiimmppllee lliisstt wwiitthh SSQQLL ssuuppppoorrtt.. | |
| To use SQL database support, you have to compile the programs with SQL | |
| support. Currently, only MySQL support is available. See IINNSSTTAALLLL..iiddxx | |
| in the package on how to do this. | |
| The programs with SQL support will work exactly like the normal | |
| programs for standard lists. However, if the file ssqqll exists in the | |
| basedir, it turns on the SQL mode and it is expected to contain SQL | |
| server connect info in the format | |
| ``host:port:user:password:database:table'' | |
| Here, ``Host'' is the SQL database server host, ``port'' can be left | |
| blank to use the default port, ``user'' and ``password'' are connec- | |
| tion credentials for a user you need to define and grant access to the | |
| database. ``Table'' is the name of the address table (``list'' in the | |
| examples above and ``list_digest'' for the corresponding digest list). | |
| For list clusters, ``:sublist'' is suffixed to this info and it is the | |
| name/address of the sublist. | |
| For each address database, you also need to create the address table | |
| as well as the ``*_slog'' subscription log table. In addition, you | |
| should create a ``*_cookie'' and ``*_mlog'' table for message logging. | |
| This is all it takes to start using an SQL database. | |
| 55..44..11.. HHeellppeerr pprrooggrraammss ffoorr SSQQLL--eennaabblleedd lliissttss.. | |
| Two programs are supplied in the distribution to make it easier to | |
| create the database user and tables. Also, ezmlm-make(1) has support | |
| for setting up SQL-enabled lists. | |
| CCrreeaattiinngg tthhee ttaabblleess | |
| ezmlm-mktab(1) will create the necessary tables: | |
| % ezmlm-mktab -d table | |
| Pipe this into the SQL client with the appropriate administrator | |
| credentials needed to create tables (see MySQL documentation, e.g. | |
| <http://www.tcx.se/>). | |
| For most lists, the only addresses that are stored in the SQL | |
| database are the subscribers of list and digest, and the ``allow'' | |
| aliases. It is NOT normally advisable to store moderator addresses | |
| there, since they are needed only at the main list and secrecy is | |
| more important. ``Deny'' addresses are few and again only needed at | |
| the main list. ``Allow'' are put in the SQL database when using the | |
| default ezmlmrc file only to make all relevant addresses | |
| manipulatable via the SQL server. The other tables are created, in | |
| case they are wanted (the cost for having them as empty table is | |
| zero). The basedir/sql file is the decision point. If it exists, an | |
| SQL table is used; if not a local ezmlm db is used. | |
| CCrreeaattiinngg aa uusseerr eennttrryy | |
| Create a user that has full access to the database from the list | |
| host. How to do this depends on the RDBMS. | |
| CCrreeaattiinngg tthhee lliisstt | |
| ezmlm-make(1) supports SQL-enabled lists with the ``-6'' switch: | |
| % ezmlm-make other_switches -6 'host:port:user:pw:db:table' \ | |
| dir dot local host | |
| Will create an SQL-enabled list that uses the SQL server for the | |
| main list subscribers, digest list subscribers (if configured) and | |
| ``allow'' poster alias addresses (if configured). | |
| 55..55.. MMaannuuaallllyy mmaanniippuullaattiinngg tthhee ssuubbssccrriibbeerrss ooff aa SSQQLL--eennaabblleedd lliisstt.. | |
| ezmlm-sub(1), ezmlm-unsub(1), and ezmlm-list(1) work as you would | |
| expect also with a SQL-enabled list. ezmlm-list(1) may be minimally | |
| slower (depending on network speed) if the SQL server is not local. | |
| ezmlm-sub(1) and ezmlm-unsub(1) will be faster, but this is noticeable | |
| only with very large subscriber lists and addition/removal of large | |
| numbers of addresses (more than several thousands). | |
| 55..66.. CCoonnvveerrttiinngg ttoo aanndd ffrroomm aanndd SSQQLL ddaattaabbaassee.. | |
| Just like other programs, ezmlm-list(1), ezmlm-sub(1), and ezmlm- | |
| unsub(1) will work with normal address databases in the absence of | |
| DDIIRR//ssqqll. However, they also have a ``-M'' switch to force this | |
| behavior even in the presence of DDIIRR//ssqqll. This is used to convert an | |
| address database from the standard type to the SQL type: | |
| % ezmlm-list -M dir | xargs ezmlm-sub dir | |
| or from the SQL version to the standard type: | |
| % ezmlm-list dir | xargs ezmlm-sub -M dir | |
| To synchronize the two, remove one and then update it with ezmlm- | |
| sub(1) from the other. Alternatively, sort the ezmlm-list(1) output | |
| for both, use diff and sed/awk to get separate files of the differ- | |
| ences, and use ezmlm-sub(1) and ezmlm-unsub(1) to apply the differ- | |
| ences to the appropriate database. | |
| This type of conversion can serve as a convenient means to convert a | |
| list from one type to another, to back up databases, and to move | |
| subscriber addresses from a standard list to a SQL table for other | |
| purposes, or from a SQL database to a standard mailing list (you may | |
| need to use addresses from a SQL table, without wanting your lists to | |
| be dependent on an SQL server for day to day operation). | |
| _N_o_t_e_: This inter-conversion requires the DDIIRR//ssqqll file. If you do not | |
| run the list against an SQL server, you need to disable deliveries | |
| before you temporarily create this file. Otherwise, the list will run | |
| against the SQL database during the time DDIIRR//ssqqll exists. | |
| 55..77.. OOppttiimmiizziinngg MMyySSQQLL ffoorr eezzmmllmm.. | |
| 55..77..11.. AAddddrreessss SSEELLEECCTTss,, aaddddiittiioonnss,, rreemmoovvaallss.. | |
| ezmlm-idx-0.40 simplifies the SQL support and queries over ezmlm- | |
| idx-0.32 at the cost of dropping distributed sublist support. We have | |
| figured out a simpler way to support the latter, which hopefully will | |
| be incorporated into ezmlm in the future (written under contract). | |
| With the simplification, the queries are very straight forward, and | |
| tuning is indicated only under extreme circumstances (very many very | |
| large and busy lists or constant addition/removal of many addresses). | |
| 55..88.. MMaaiinntteennaannccee ooff tthhee MMyySSQQLL ddaattaabbaassee.. | |
| Weekly to monthly error checks on MySQL tables is recommended. Best is | |
| to use: | |
| # isamchk -s -O readbuffer=2M */*.ISM | |
| Other options allow automatic correction of errors, but are dangerous | |
| if tables are accessed while isamchk is running. | |
| Other isamchk options allow recovery of space after frequent | |
| insert/delete of addresses (can also be done with ``OPTIMIZE TABLE''), | |
| key optimization, etc. See the MySQL documentation ( | |
| <http://www.tcx.se>) for more info. | |
| 66.. PPoossssiibbllee eerrrroorr ccoonnddiittiioonnss iinn eezzmmllmm lliissttss.. | |
| 66..11.. WWhhaatt ddoo II ddoo iiff eezzmmllmm ddooeessnn''tt wwoorrkk?? | |
| Try to determine where the problem occurs and how to reproduce it: | |
| +o Do messages to ezmlm return an error message to the sender or not? | |
| +o What is/are the error message(s)? | |
| +o What does ezmlm log into the mail log? | |
| +o Are you using a setup with virtual domains, and qmail<1.02 or | |
| ezmlm-idx<0.31? If so, have you adjusted DDIIRR//iinnllooccaall (see | |
| ``Adapting ezmlm-make for virtual domains'')? | |
| +o Are posts sent out to the subscribers? | |
| +o Are there subscribers? | |
| % ezmlm-list DIR | |
| +o Are there moderators? | |
| % ezmlm-list moddir | |
| where ``moddir'' is the contents of DDIIRR//rreemmoottee (for remote admin | |
| lists), of DDIIRR//mmooddssuubb (for subscription moderated lists) or DDIIRR//mmoodd-- | |
| ppoosstt (for message moderation), if and only if the contents start with | |
| a forward slash. The default in all cases is DDIIRR//mmoodd//. If both | |
| DDIIRR//mmooddssuubb and DDIIRR//rreemmoottee contain directory names, the one in DDIIRR//mmoodd-- | |
| ssuubb is used for both subscription moderation and remote admin. | |
| +o Are the ownerships of all files correct, i.e. read/writable for the | |
| owner? | |
| % chown -R user DIR | |
| For lists under alias: | |
| % chown -R alias DIR | |
| If you use custom moderator databases, those directories and all their | |
| contents must also be readable for the user under which the list oper- | |
| ates (i.e. the user qmail changes to during the delivery). | |
| +o Read the qmail log and capture relevant parts. | |
| +o Did you customize the package at all? If so, try the default | |
| settings which are known to work. | |
| +o Did you customize eezzmmllmmrrcc((55))? Try to use the default copy (skip the | |
| -c switch). | |
| +o Did your customization of ..eezzmmllmmrrcc fail to have an effect? | |
| Remember to use the -c switch. The ..eezzmmllmmrrcc file used is the one in | |
| ``dotdir'', i.e. the directory where the ..qqmmaaiill files go, usually, | |
| but NOT necessarily, the one in your home directory. | |
| +o Make sure you followed the instructions in man pages and other | |
| documentation. Most of the problems are due to not closely | |
| following the instructions. Try again with a new test list. | |
| +o Make sure to take notes of how the list was created (which flags | |
| you used, etc.). | |
| +o use ezmlm-check(1) (see ``Using ezmlm-check to find setup | |
| errors''). and compare the variables identified by ezmlm-check to | |
| DDIIRR//iinnllooccaall, etc. If you don't get a reply from ezmlm-check, then | |
| message was not delivered properly. Check your qmail setup. | |
| +o Try to find your problem or a question/item close to it in the FAQ. | |
| +o If this didn't resolve the problem, post to the ezmlm mailing list, | |
| describing how you set up the list, your general setup (especially | |
| the relevant control files for a virtual domain), what works and | |
| what doesn't and what results from different actions (log entries, | |
| error messages). | |
| If you have solved a problem that you believe might be more general, | |
| please send a description of the problem and its solution to the | |
| authors, ideally as a FAQ item. | |
| 66..22.. HHooww ddoo II rreeppoorrtt eezzmmllmm bbuuggss?? | |
| If you have found a bug in the ezmlm-idx additions, please send a bug | |
| report by E-mail to bruce@untroubled.org. Describe the error, your | |
| setup, and your system in sufficient detail so that it can be | |
| reproduced by third parties. Include relevant sections of mail log, | |
| and information about any error messages returned. If you ran into a | |
| problem and resolved it on your own, include a fix as a context diff | |
| against the distribution. | |
| If you have found a bug in ezmlm proper (unlikely), please send a | |
| similar bug report to djb@cr.yp.to or ezmlm@list.cr.yp.to. If you're | |
| unsure where the bug is, you can start with bruce@untroubled.org. If | |
| you have problems and questions, please refer to the documentation, | |
| then to mailing list archives, then E-mail the ezmlm mailing list or | |
| the authors. | |
| 66..33.. WWhheerree ddoo II sseenndd ssuuggggeessttiioonnss ffoorr eezzmmllmm--iiddxx iimmpprroovveemmeennttss?? | |
| E-mail to bruce@untroubled.org, ideally with a context diff. For | |
| ezmlm proper, ezmlm@list.cr.yp.to may be better. | |
| 66..44.. UUssiinngg eezzmmllmm--tteesstt ttoo cchheecckk tthhee eezzmmllmm((--iiddxx)) pprrooggrraammss.. | |
| ezmlm-test(1) tests the different ezmlm(-idx) programs. It is useful | |
| to test your installation. If this program succeeds, it is not likely | |
| that you have problems due to platform-specific ezmlm(-idx) bugs. If | |
| ezmlm-test(1) fails, this is the place to start. The program is good | |
| at finding problems but not that easy to use to determine the cause. | |
| Start by finding the place where it fails, recreate the conditions | |
| (add ``exit 0'' just before the point of failure and set the | |
| environment variables as set by the script), then try to run the | |
| command manually. ~~//____TTSSTTDDIIRR____eerrrr may contain a relevant error | |
| message. For further help, E-mail bruce@untroubled.org. | |
| 66..55.. UUssiinngg eezzmmllmm--cchheecckk ttoo ffiinndd sseettuupp eerrrroorrss.. | |
| ezmlm-check(1) is included in the ezmlm-idx distribution. ezmlm- | |
| check(1) is an evolving shell script which when put into a ..qqmmaaiill file | |
| of a mailing list will return information about the environment | |
| variables passed by qmail to ezmlm as well as the list setup. It also | |
| attempts to check for common error conditions, such as HOST and | |
| DDIIRR//iinnhhoosstt mismatch, missing files, etc. To use ezmlm-check(1), place | |
| a line: | |
| |/usr/local/bin/ezmlm/ezmlm-check 'DIR' | |
| where ``DIR'' is the list directory, as the first line in DDIIRR//eeddiittoorr | |
| (for mail to list), DDIIRR//mmaannaaggeerr (for mail to list-subscribe, list- | |
| help, etc), DDIIRR//mmooddeerraattoorr (for mail to list-accept, list-reject). | |
| ezmlm-check(1) will send its output to SENDER. The rest of the ..qqmmaaiill | |
| file will be ignored. If you use a non-standard ezmlm binary direc- | |
| tory, change the ezmlm-check(1) path accordingly. | |
| ezmlm-check(1) in combination with mail logs and ezmlm error messages | |
| should make it easy to diagnose setup problems. When done, don't | |
| forget to remove the ezmlm-check(1) line. It is not security-proofed | |
| against SENDER manipulation and with it in place, the list won't work. | |
| ezmlm-check(1) does not check all aspects of list generation, but | |
| catches all common errors when lists are created with ezmlm-make(1), | |
| an many other errors as well. The ezmlm-check(1) reply is also very | |
| valuable for support via E-mail. | |
| 66..66.. PPoossttss aarree rreejjeecctteedd:: SSoorrrryy,, nnoo mmaaiillbbooxx hheerree bbyy tthhaatt nnaammee | |
| ((##55..11..11)).. | |
| qmail tried to deliver the mail, but there is no mailbox with that | |
| name. ezmlm-make(1) was used with incorrect arguments, often in | |
| conjunction with a virtual domain setup. If the list is in a virtual | |
| domain, the ``host'' argument for ezmlm-make(1) should be the virtual | |
| domain, not the real host name. See ``What names can I use for my | |
| mailing lists?'' and ``Lists in virtual domains'' for more info. | |
| Other possibilities are that your qmail setup is incorrect. For a | |
| virtual domain controlled by user ``virt'', create ~~vviirrtt//..qqmmaaiill--tteesstt | |
| containing ``|/bin/echo "It worked"; exit 100''. Now send mail to | |
| test@virtual.dom. If delivery works, you should get an error message | |
| ``It worked'' back. If you get anything else, you need to adjust your | |
| qmail setup. Similarly, for a normal user, create ~~uusseerr//..qqmmaaiill--tteesstt | |
| and mail user-test@host to test that you control extension addresses. | |
| If this fails, contact your system administrator or adjust your qmail | |
| setup. | |
| If these tests worked, but your list still does not, you most likely | |
| supplied an incorrect ``dot'' argument for ezmlm-manage(1). It should | |
| be ~~vviirrtt//..qqmmaaiill--tteesstt for the list test@virtual.dom and ~~uusseerr//..qqmmaaiill-- | |
| tteesstt for the list user-test@host. | |
| 66..77.. PPoosstt aarree nnoott sseenntt ttoo ssuubbssccrriibbeerrss.. | |
| NNoonn--mmooddeerraatteedd lliissttss | |
| 1. Read the qmail log. Is your message delivered to the list? | |
| You can also: | |
| % cat DIR/num | |
| 2. Send a message to the list. | |
| 3. See if it was received/processed: | |
| % cat DIR/num | |
| If the number was incremented, the message went to the list, and | |
| was successfully sent out in the opinion of ezmlm-send(1) | |
| (ezmlm-send(1) doesn't mind if there are no subscribers, so | |
| check that there really are both moderators and subscribers. | |
| These are added with ezmlm-sub(1). You can not just put | |
| addresses into a text file!). | |
| MMeessssaaggee mmooddeerraatteedd lliissttss | |
| 1. Check number of queued messages awaiting moderation: | |
| % ls -l DIR/mod/pending | |
| 2. Send a message to the list. | |
| 3. Check if another message was added to the queue: | |
| % ls -l DIR/mod/pending | |
| A new file should have appeared. If this file has the owner exe- | |
| cute bit set, it was successfully processed by ezmlm-store(1). | |
| If this is true, but no moderation request was sent, then con- | |
| tinue with ``Messages posted to the list do not result in moder- | |
| ation requests''. If there is no new file, the message did not | |
| reach ezmlm-store(1), or ezmlm-store(1) failed early. In both | |
| cases, the mail log should tell you more. | |
| If the message is there, but the owner execute bit is not set, | |
| ezmlm-store(1) failed. Check the mail log. Possible reasons | |
| include a failure to find the ezmlm-send(1) binary or DDIIRR//mmssgg-- | |
| ssiizzee is specified and the message body size is outside of the | |
| allowed range (again, this is accompanied by an error message | |
| and mail log entry). | |
| GGeenneerraall | |
| 1. If the message was not received/processed, there should be an | |
| error message in the mail log. | |
| 2. Fix temporary and permanent errors with the help of qmail and | |
| ezmlm documentation. | |
| 3. If there is no log entry at all, then the mail went to | |
| another host. Check your qmail setup. | |
| 4. If mail was delivered to the list, but not forwarded to the | |
| subscribers (check the qmail log - there should be an entry | |
| for a new delivery to the list), tthhee mmoosstt ccoommmmoonn eerrrroorr iiss | |
| tthhaatt tthheerree aarree nnoo ssuubbssccrriibbeerrss.. In this case, ezmlm-send(1) | |
| sends a message from list-help@host, and logs success, but no | |
| recipients are logged. To qmail, it is perfectly acceptable | |
| to send a message without recipients, so no error message is | |
| logged. | |
| 5. Check subscribers: | |
| % ezmlm-list DIR | |
| 6. Assure that ownerships are correct on the list directories: | |
| % chown -R user DIR | |
| For lists owned by the ``alias'' user (in ~alias): | |
| % chown -R alias DIR | |
| 7. Most other problems should be easily corrected with the help | |
| of the qmail log. | |
| 66..88.. eezzmmllmm--mmaakkee ffaaiillss:: uussaaggee:: eezzmmllmm--mmaakkee ...... | |
| The command line you specified is incomplete. Usually, a command line | |
| argument has been omitted or a switch was placed after the other | |
| arguments rather than before. | |
| The same error is issued when you attempt to invoke ezmlm-make(1) with | |
| only the ``DIR'' argument without using the ``-e'' or ``-+'' switch. | |
| Other command line arguments can be omitted only when editing lists | |
| created or previously edited with ezmlm-make from ezmlm-idx>=0.23. | |
| Some special situations use ezmlm-make(1) as a general script | |
| processor, e.g. the setting up of sublists with ezmlmsubrc(5) and of | |
| a global interface with ezmlmglrc(5). Here, there is no ``memory'' so | |
| all arguments have to be specified, even when using the ``-e'' or | |
| ``-+'' switches. | |
| 66..99.. eezzmmllmm--mmaakkee ffaaiillss:: UUnnaabbllee ttoo ccrreeaattee ...... | |
| This error occurs when ezmlm-make is used to set up a list, and it | |
| tries to create a directory or a ..qqmmaaiill--lliisstt link that already exists. | |
| Usually, this occurs because the list already exists. If you are | |
| creating a new list, first erase remnants of any old test lists by | |
| deleting the list directory and the link files: _N_O_T_E_: _D_O _N_O_T _U_S_E _T_H_E_S_E | |
| _C_O_M_M_A_N_D_S _W_I_T_H_O_U_T _U_N_D_E_R_S_T_A_N_D_I_N_G _T_H_E_M_. You may erase more than you | |
| intended! | |
| % rm -rf DIR | |
| % rm -rf ~/.qmail-list ~/.qmail-list-* | |
| If you want to save some files (such as in DDIIRR//tteexxtt//), make backup | |
| copies first, run ezmlm-make, then copy the backups to DDIIRR//tteexxtt//. Of | |
| course, it is usually easier to create a custom ..eezzmmllmmrrcc, and than use | |
| that for all your lists. | |
| To use ezmlm-make(1) to modify an existing list, without changing the | |
| subscriber or moderator lists or the message archive, use the ezmlm- | |
| make ``-e'' switch. With this, you need to re-specify all desired | |
| switches. If instead you use ``-+'' you need to specify only switches | |
| that are changed/new. NOTE: any customization that you've made to | |
| program files like DDIIRR//eeddiittoorr will be overwritten. For instance, if | |
| you manually added checks to DDIIRR//eeddiittoorr or added a pointer to a custom | |
| moderator database in e.g. DDIIRR//mmooddssuubb these changes will be lost. To | |
| retain such changes (especially ones that are common for several of | |
| your lists), place them in a local ~~//..eezzmmllmmrrcc file instead. You can | |
| either make such changes the default for your lists, or you can | |
| configure ~~//..eezzmmllmmrrcc so that they are added only if a specific ezmlm- | |
| make switch is used. (see ``Customizing ezmlm-make operation''). | |
| 66..1100.. eezzmmllmm--mmaakkee ffaaiillss:: ...... eezzmmllmmrrcc ddooeess nnoott eexxiisstt | |
| There is no readable ezmlmrc(5) file in //eettcc//eezzmmllmm nor in the ezmlm | |
| binary directory. If you have ..eezzmmllmmrrcc in ``dotdir'' (see | |
| ``Terminology: dotdir'') use the ezmlm-make(1) ``-c'' switch (see | |
| ``Customizing ezmlm-make operation''). _N_o_t_e_: The default location for | |
| a global edited eezzmmllmmrrcc file is //eettcc//eezzmmllmm//eezzmmllmmrrcc as of ezmlm- | |
| idx-0.40. | |
| 66..1111.. IInnddeexx//ggeett//tthhrreeaadd rreeqquueessttss ffaaiill qquuiieettllyy oorr wwiitthh eerrrroorrss ffrroomm | |
| eezzmmllmm--mmaannaaggee.. | |
| Make sure this is an indexed list and has an ``ezmlm-get'' line first | |
| in DDIIRR//mmaannaaggeerr. If not, your commands are fed directly to ezmlm- | |
| manage(1). If they contain ``-'', ezmlm-manage interprets the rest as | |
| an address to which it sends the error message. Usually, this results | |
| in a "trash address" mail log entry and a bounce, which is why you | |
| don't see any error message. The same happens if you send non-existing | |
| commands followed by ``-'' and arguments. Thus, list-gugu-54@host | |
| results in an ezmlm-manage error, resulting in help text being sent to | |
| 54@localhost ... When testing, try using syntax with a ``.'', not a | |
| ``-'', after the action command, e.g. list-get.54_60@host. This will | |
| assure that error messages get back to you. | |
| 66..1122.. DDiiggeesstt ttrriiggggeerriinngg rreeqquueessttss ffaaiill.. | |
| (Digest triggering by mail is a relic from older versions. Use the | |
| standard setup with ezmlm-tstdig(1) as by ezmlm-make(1) ``-d'', or run | |
| ezmlm-get(1) directly from the command line via crond(8).) | |
| If you get an error message, it tells you why the request failed. If | |
| you do not, see the previous item. Try using syntax without ``-'' | |
| after the ``dig'' command. Also, requests that would result in an | |
| empty digest are silently ignored, but the reason why no digest was | |
| created is logged to the mail log. This is done so that cron scripts | |
| generating daily digest will just fail silently, rather than | |
| generating an error, for what isn't really one. | |
| 66..1133.. RReemmoottee aaddmmiinniissttrraattiioonn ((uunn))ssuubbssccrriibbee ccoonnffiirrmm rreeqquueessttss ggoo ttoo tthhee | |
| uusseerr,, nnoott tthhee mmooddeerraattoorr.. | |
| Either the list is not set up for remote administration (i.e. | |
| DDIIRR//rreemmoottee does not exist), or the moderator is sending the request | |
| from an address that is not in the moderator database (e.g. from | |
| Fred@host.dom, when fred@host.dom is in the moderator db, but | |
| Fred@host.dom is not). ezmlm-manage(1) has no way of knowing that the | |
| SENDER is a moderator and treats the request as coming from a regular | |
| user, i.e. it sends a confirmation request to the target address. | |
| Correct the SENDER address, the address in the moderator db, or create | |
| DDIIRR//rreemmoottee. If you are using a non-default moderator db location, make | |
| sure that the moddir name is in DDIIRR//rreemmoottee (for remote admin only) or | |
| DDIIRR//mmooddssuubb (if there is subscription moderation as well). In both | |
| cases, the contents will be ignored unless they start with a ``/''. | |
| 66..1144.. ((UUnn))ssuubbssccrriibbeerrss ddooeess nnoott rreecceeiivvee aa ((uunn))ssuubbssccrriibbee aacckknnoowwlleeddggee-- | |
| mmeenntt | |
| With normal ezmlm lists, a subscriber confirming a subscription or a | |
| non-subscriber confirming a unsubscribe request results in a message | |
| to the target address. This message is suppressed when the list is set | |
| up for subscription and/or remote administration, so that | |
| confirmations from multiple moderators do not result in multiple | |
| messages to the target address. The target address is always notified | |
| if the subscriber status of the address changes (from non-subscriber | |
| to subscriber or vice versa). | |
| 66..1155.. MMeessssaaggeess ppoosstteedd ttoo aa mmooddeerraatteedd lliisstt aarree sseenntt oouutt wwiitthhoouutt mmooddeerr-- | |
| aattiioonn.. | |
| The list is not set up as a moderated list. Check DDIIRR//eeddiittoorr. If | |
| should contain a ezmlm-store(1) line after the ezmlm-reject line if it | |
| is a moderated list. No ezmlm-send(1) line should be in DDIIRR//eeddiittoorr. | |
| If there is, the list is not moderated. Also, DDIIRR//mmooddppoosstt must exist. | |
| If it does not, ezmlm-store(1) will post the messages directly (via | |
| ezmlm-send(1)) without sending them out for moderation first. This | |
| makes it easy to temporarily remove message moderation by simply | |
| removing DDIIRR//mmooddppoosstt, but may be confusing if the user is unaware of | |
| this ezmlm-store(1) feature. | |
| 66..1166.. MMeessssaaggeess ppoosstteedd ttoo aa mmooddeerraatteedd lliisstt ddoo nnoott rreessuulltt iinn mmooddeerraattiioonn | |
| rreeqquueessttss.. | |
| +o Check that ~~//..qqmmaaiill--lliisstt is a link to DDIIRR//eeddiittoorr. | |
| +o Check that DDIIRR//eeddiittoorr contains ezmlm-store(1) and not ezmlm- | |
| send(1). If this is not the case, the list is not message | |
| moderated. | |
| +o Check for the presence of DDIIRR//mmooddppoosstt. If this file is missing, the | |
| list is not moderated, even if DDIIRR//eeddiittoorr is set up with ezmlm- | |
| store(1). | |
| +o Check qmail logs for error conditions during post delivery and | |
| correct these. If the messages are delivered correctly, verify that | |
| ezmlm-store(1) generated the moderation requests to the moderators. | |
| +o Check to see that there are indeed moderators: | |
| % ezmlm-list moddir | |
| where ``moddir'' is the contents of DDIIRR//mmooddppoosstt if they start with a | |
| ``/'', otherwise those of DDIIRR//rreemmoottee (same ``/'' requirement), and | |
| DDIIRR//mmoodd// by default. | |
| +o Check file ownerships. | |
| Another common problem is directory ownerships, especially for | |
| lists under ~alias. To correct this error, issue the following | |
| command while in the ~alias directory (User the user/group of the | |
| list owner; for ~alias lists user=alias, group=qmail): | |
| % chown -R user DIR | |
| 66..1177.. MMooddeerraattiioonn rreeqquueesstt rreepplliieess ddoo nnoott rreessuulltt iinn tthhee aapppprroopprriiaattee | |
| aaccttiioonn.. | |
| +o Check that the address in the moderation request is correct. | |
| +o Check that the ~~//..qqmmaaiill--lliisstt--aacccceepptt--ddeeffaauulltt and ~~..//qqmmaaiill--lliisstt-- | |
| rreejjeecctt--ddeeffaauulltt links exists and point to DDIIRR//mmooddeerraattoorr. | |
| +o Check that DDIIRR//mmooddeerraattoorr invokes ezmlm-moderate(1), and that there | |
| is a copy of ezmlm-send(1) in the ezmlm binary directory. | |
| +o Check the qmail log to see that the replies were delivered to this | |
| address. | |
| +o Check directory ownerships. For lists under alias: | |
| % chown -R alias DIR | |
| _N_O_T_E_: This needs to be done every time you add/remove moderators as | |
| ``root''. For user-controlled lists (i.e. you are ``user'' when run- | |
| ning e.g. ezmlm-sub(1)) this is not a problem. | |
| If setting up lists for _a_l_i_a_s, you can avoid many problems by setting | |
| them up as ``alias'', i.e. use ``su alias'' not ``su''. | |
| If setting up lists for a user controlling a virtual domain, you can | |
| avoid many problems by assuming that uid (``su user'') before making | |
| any changes. | |
| +o Check the qmail logs: After the delivery of the moderation request, | |
| ezmlm-send(1) should run to send messages to all the list | |
| subscribers. | |
| +o Make sure there are list subscribers: | |
| % ezmlm-list DIR | |
| Most error conditions, incorrect request cookies, etc, should result | |
| in informative error messages in the mail log. | |
| 66..1188.. MMooddeerraattoorr ccoommmmeennttss wwiitthh mmooddeerraattiioonn rreeqquueesstt rreepplliieess aarree nnoott | |
| aaddddeedd ttoo tthhee ppoosstt//sseenntt ttoo tthhee ppoosstteerr.. | |
| Moderator comments are where the moderator chooses to ``reject'' the | |
| message and inform the person posting which his/her message was | |
| inappropriate. However, if a moderator wants to comment on aacccceepptteedd | |
| posts, the moderator may only do so via a follow-up post to the list. | |
| This is to avoid anonymously tagged-on text to posts. If a moderator | |
| has something to say to the list, they should (and can only) do so in | |
| regular posts. If you want to edit posts before sending them to the | |
| list, set up a moderated list with you as the only moderator. Into | |
| DDIIRR//eeddiittoorr before the ezmlm-store(1) line, put a condredirect(1) line | |
| that redirects all messages with a SENDER other than you to your | |
| address. You can edit the contents ands repost, the message will pass | |
| condredirect(1), and hit ezmlm-store(1). You will be asked to confirm | |
| (needed to assure that nobody else can post directly) and when you do, | |
| the messages is posted. | |
| Moderator comments for ``reject(ed)'' posts need to be enclosed | |
| between two lines (yes, the end marker is required), having ``%%%'' | |
| starting on one of the first 5 positions of the line. If there are | |
| characters before the marker, these will be removed from any comment | |
| line that starts with the same characters (e.g. the characters before | |
| ``comment2'' in the example below will be removed): | |
| %%% | |
| comment | |
| %%% | |
| or: | |
| > %%% | |
| comment | |
| > comment2 | |
| > %%% | |
| but not: | |
| %% | |
| COMMENT | |
| %% | |
| and not: | |
| %%% this is my comment %%% | |
| or | |
| ezmlm said>%%% | |
| comment | |
| ezmlm said>%%% | |
| 66..1199.. SSoommee hheeaaddeerrss aarree mmiissssiinngg ffrroomm mmeessssaaggeess iinn tthhee ddiiggeesstt.. | |
| By default, only a subset of message headers are sent out in any | |
| digest and archive retrieval requests. First, headers in | |
| DDIIRR//hheeaaddeerrrreemmoovvee are stripped. Most non-essential headers are excluded | |
| when the default archive retrieval format (``m'') is used. Use the | |
| ``v'' or ``n'' format (see ezmlm-get(1)) to get all message headers | |
| that are in the archive. | |
| 66..2200.. SSoommee RReecceeiivveedd:: hheeaaddeerrss aarree mmiissssiinngg ffrroomm mmeessssaaggeess.. | |
| ezmlm-idx>=0.313 removes all but the latest ``Received:'' header from | |
| messages sent to the list. This is done since messages, especially | |
| sent via sublists, may have so many ``Received:'' headers that MTAs | |
| with primitive ``loop detection'' erroneously reject them. The | |
| subscriber can subscribe, since those messages have fewer such | |
| headers, and will receive warning and probe messages, but never see | |
| any posts. | |
| To see all headers of a message for diagnostic purposes, mail | |
| mainlist-getv.num@mainhost, where ``num'' is the message number. All | |
| ``Received:'' headers are stored in the archive copy of the message. | |
| To disable ``Received:'' header pruning, use the ezmlm-send(1) ``-r'' | |
| switch. | |
| 66..2211.. MMyy MMuutttt uusseerrss ccaannnnoott tthhrreeaadd tthheeiirr ddiiggeesstt mmeessssaaggeess.. | |
| The digest by default removed non-essential headers like ``In-Reply- | |
| To:'' from messages. Modern MUAs, like _M_u_t_t can split out messages | |
| from a digest and then thread them based on such headers. To include | |
| these and all other headers in the digest messages, use the ``v'' or | |
| ``n'' format as described on the ezmlm-get(1) man page. Normally, the | |
| threading done by ezmlm is sufficient and the default format preferred | |
| to reduce message and digest size, often by 25% or more. | |
| 66..2222.. PPoossttss ffaaiill:: MMeessssaaggee aallrreeaaddyy hhaass MMaaiilliinngg--LLiisstt ((##55..77..22)).. | |
| The list you are trying to post to is used as a sublist (a list fed | |
| with messages from another (ezmlm) list), but not properly set up as a | |
| sublist. Put the name of the parent list (``origlist@orighost'') | |
| which exactly matches the SENDER of the original (or parent) list into | |
| DDIIRR//ssuubblliisstt. Check the ownership of DDIIRR//ssuubblliisstt, to make sure that | |
| the user controlling the list can read it. | |
| Alternatively, use the ezmlm-make(1) ``-0 origlist@orighost'' switch | |
| (see ``Customizing ezmlm-make operation''). | |
| 66..2233.. TThhee llaasstt lliinnee ooff aa DDIIRR//tteexxtt// ffiillee iiss iiggnnoorreedd.. | |
| Only complete lines ending with ``newline'' are copied. The last line | |
| in the DDIIRR//tteexxtt// file most likely lacks a terminal ``newline''. | |
| 66..2244.. NNoo CCOONNFFIIRRMM rreeqquueessttss aarree sseenntt ttoo mmooddeerraattoorrss.. | |
| Assuming that the user initiated the subscribe request, got a | |
| ``confirm'' request, and replied correctly, there are two possible | |
| causes for the problem: Either the list is not subscription moderated | |
| (in this case the user is subscribed and received a note saying so) or | |
| the list is subscription moderated but no moderators have been added | |
| (ezmlm-manage(1) sends out the request and doesn't mind that there are | |
| no recipients). | |
| Check that the list is subscription moderated: | |
| % cat DIR/modsub | |
| If this fails the list is not subscription moderated. If it succeeds | |
| with a directory name, this is your ``moddir''. If not: | |
| % cat DIR/remote | |
| If this succeeds with a directory name, this is your moddir, otherwise | |
| the moddir is ``DDIIRR//mmoodd//''. | |
| Check for moderators: | |
| % ezmlm-list moddir | |
| If there are none, this is your problem. If there are some, check the | |
| mail log to see what happened when the CONFIRM requests was supposed | |
| to have gone out. Assure correct ownerships for the moderator db: | |
| % chown -R user moddir | |
| For ~alias: | |
| # chown -R alias moddir | |
| Another possible problem is that you are trying to use the remote | |
| admin feature to subscribe a user, but you get no CONFIRM request. | |
| Usually, this is due to your SENDER address not being in the moderator | |
| database. The CONFIRM request went to the target address instead, | |
| since as far as ezmlm is concerned, you are a regular user. | |
| 66..2255.. DDeelliivveerriieess ffaaiill ````tteemmppoorraarryy qqmmaaiill--qquueeuuee eerrrroorr'''' | |
| Usually, this is due to a corrupted qmail queue (should affect all | |
| mail) or a corrupted ezmlm subscriber database (See ``How to deal with | |
| corrupted subscriber lists''). ezmlm-idx>=0.40 has more informative | |
| qmail error messages. | |
| 66..2266.. HHooww ttoo ddeeaall wwiitthh ccoorrrruupptteedd ssuubbssccrriibbeerr lliissttss | |
| Dan has made ezmlm very robust, but a subscriber list can still become | |
| corrupted due to e.g. disk errors. Usually, this will lead to a | |
| ``temporary qmail-queue error'' because an address does not conform to | |
| the standard format. Occasionally, two E-mail addresses are fused, | |
| e.g. ``addr1@hostTaddr2@host''. To diagnose and fix this type of | |
| error, disable deliveries (easiest is to ``chmod 0 DIR/lock''), back | |
| up the contents of DDIIRR//ssuubbssccrriibbeerrss//, then: | |
| % ezmlm-list DIR > tmp.tmp | |
| ( edit tmp.tmp to fix any problems ) | |
| % rm -rf DIR/subscribers/* | |
| % ezmlm-sub DIR < tmp.tmp | |
| This will list all E-mail addresses, allow you to edit them, then re- | |
| subscribe them. Don't forget to re-enable deliveries. | |
| 66..2277.. VVaaccaattiioonn pprrooggrraamm rreepplliieess aarree ttrreeaatteedd aass bboouunncceess bbyy eezzmmllmm.. | |
| Standard vacation programs do not reply to messages that contain a | |
| ``Precedence: bulk'' header. ezmlm-idx>=0.23 sets up lists with this | |
| header in DDIIRR//hheeaaddeerraadddd. For older lists, use ``ezmlm-make -+'' or | |
| ``ezmlm-make -e'' to update them, or just add a ``Precedence: bulk'' | |
| line to DDIIRR//hheeaaddeerraadddd. | |
| 66..2288.. DDiiggeessttss ddoo nnoott ccoommee aatt rreegguullaarr hhoouurrss.. | |
| In the default setup, ezmlm-tstdig(1) determines if a new digest is | |
| due every time a message arrives to the list. Thus, even though ezmlm- | |
| tstdig is set to produce digests 48 hours after the previous digest, | |
| the digest will not be generated until a message arrives. If you'd | |
| like digests at a specific time each day, use crond(8) and crontab(1) | |
| to daily run: | |
| % ezmlm-get DIR | |
| 66..2299.. PPrreevveennttiinngg llooooppss ffrroomm mmiissccoonnffiigguurreedd ssuubbssccrriibbeerr aaddddrreesssseess.. | |
| Occasionally, a subscriber address is misconfigured and automatically | |
| sends a message back to the list. Sometimes, the subscriber's setup | |
| has removed headers that ezmlm uses for loop detection or the | |
| generated messages has nothing in common with the send-out. To block | |
| such mail at the list, include the ezmlm-make(1) ``-k'' (kill) switch | |
| and add the offending address to DDIIRR//ddeennyy// with | |
| % ezmlm-sub DIR deny badadr@badhost | |
| ezmlm-unsub(1) and ezmlm-list(1) can be used similarly to remove or | |
| list the addresses. If your list is configured for remote administra- | |
| tion (see ``How remote administration works''), and you are a remote | |
| administrator, you can add the address by sending mail to list-deny- | |
| badadr=badhost@listhost. Other subscriber database commands work as | |
| well for list-deny. | |
| In other instances, a configuration error somewhere close to the | |
| subscriber creates a local mail loop throwing off messages to you. | |
| They are often bounces that are sent to the list address or to ``list- | |
| help'' due to configuration errors. Rather than accepting these, or | |
| the often resulting double bounces to ``postmaster'', just add a | |
| ``|/path/ezmlm-weed'' line first to DDIIRR//eeddiittoorr or DDIIRR//mmaannaaggeerr. This | |
| discards the bounce messages generated by the looping systems. ezmlm- | |
| weed(1) is also useful in other settings where excessive numbers of | |
| error messages are sent to the wrong address. | |
| 66..3300.. AA uusseerr ccaann ssuubbssccrriibbee aanndd rreecceeiivveess wwaarrnniinngg aanndd pprroobbee mmeessssaaggeess,, | |
| bbuutt nnoo mmeessssaaggeess ffrroomm tthhee lliisstt.. | |
| ezmlm lists (ezmlm-idx>=0.31) remove ``Received:'' headers from | |
| incoming messages by default. This can be prevented with the ezmlm- | |
| send(1) ``-r'' switch. When the headers are propagated, especially | |
| sublist message may have many (15-20 or more), ``Received:'' headers. | |
| If there is a poorly configured sendmail host with a ``hopcount'' set | |
| too low, it will bounce these messages, incorrectly believing that the | |
| many ``Received:'' headers are due to a mail loop. The reason that | |
| administrative from the list do not bounce is that they have fewer | |
| ``Received:'' headers, since they originate from the sublist. | |
| The message with all headers including the removed ``Received:'' | |
| headers can be retrieved from the list archive with the _-_g_e_t_v command. | |
| The top incoming ``Received:'' header is added by qmail at the receipt | |
| to the list (or last sublist) host. This header is not removed, to | |
| allow the recipient to determine when the message reached the list. | |
| 77.. CCuussttoommiizziinngg eezzmmllmm--mmaakkee ooppeerraattiioonn vviiaa eezzmmllmmrrcc | |
| 77..11.. UUssiinngg eezzmmllmm--mmaakkee ttoo eeddiitt eexxiissttiinngg lliissttss.. | |
| With ezmlm-make(1) (from ezmlm-idx >=0.21) you can use the ``-e'' | |
| switch to edit existing lists. Invoke the ezmlm-make(1) command just | |
| as you would to create the list anew, but change the switches to | |
| reflect the desired change, and add the ``-e'' switch. ezmlm-make will | |
| accept preexisting directories and overwrite or remove files to change | |
| the setup. The message counter (DDIIRR//nnuumm), digest counters (DDIIRR//ddiiggnnuumm | |
| and DDIIRR//ddiiggiissssuuee), the key (DDIIRR//kkeeyy) and the message archive will not | |
| be affected. | |
| If the list has been created or previously edited with ezmlm-make(1) | |
| from ezmlm-idx>=0.23, the list remembers (via DDIIRR//ccoonnffiigg) the | |
| arguments and the switches. All you have to do is to use the ezmlm- | |
| make(1) ``-+'' switch and specify options you wish to change, or use | |
| the ``-e'' switch and specify all non-default options you'd like to | |
| use. | |
| _N_O_T_E_: ezmlm-make(1) ``-e'' and ``-+'' will OVERWRITE any manual | |
| customizations you have made to the program files, but not text files | |
| and DDIIRR//hheeaaddeerraadddd, DDIIRR//hheeaaddeerrrreemmoovvee, etc. To reset all such files | |
| (such as when changing list name), use ``-ee'' or ``-++''. | |
| To make general customizations, please change eezzmmllmmrrcc((55)) (see ``What | |
| is ezmlmrc?'' or read on) instead and use the ``-c'' switch as well. | |
| DO NOT use this option to change production lists without testing it | |
| on other lists first. Also, for some changes, removing or adding a | |
| flag is sufficient (see ``How do I quickly change properties of my | |
| list''). | |
| 77..22.. WWhhaatt iiss eezzmmllmmrrcc?? | |
| ezmlm-make(1) has a number of default switches that through eezzmmllmmrrcc((55)) | |
| have defined functions. These allow creation of many standard lists. | |
| In addition, ezmlm-make(1) operation is fully customizable via | |
| modification of the template file, ezmlmrc(5) or .ezmlmrc. A default | |
| ezmlmrc(5) is installed in the ezmlm binary directory. The system | |
| administrator can install a system-wide default eezzmmllmmrrcc((55)) file in | |
| //eettcc//eezzmmllmmrrcc (or symlinked from there) which overrides the file in the | |
| ezmlm binary directory. If the ezmlm-make(1) ``-c'' (custom) switch is | |
| used, ezmlm-make(1) will look for ..eezzmmllmmrrcc in the ``dotdir'', i.e. the | |
| directory in which the ..qqmmaaiill--lliisstt links are placed. This is usually a | |
| set directory for a given user/virtual domain (usually, the home | |
| directory for the user controlling the lists). | |
| eezzmmllmmrrcc((55)) controls everything except creation of the list directory | |
| itself and the key used for cookie generation. The syntax of | |
| eezzmmllmmrrcc((55)) is documented in ezmlm-make(1), the ezmlmrc(5) man page, | |
| and in the ezmlmrc(5) file installed in the ezmlm binary directory. | |
| ezmlm-make limits its effects to within the list ``dot'' and ``DIR'' | |
| directories. In the ``dotdir'', only links to within ``DIR'' can be | |
| created. | |
| 77..33.. CChhaannggiinngg ddeeffaauullttss ffoorr DDIIRR//tteexxtt// ffiilleess.. | |
| Copy the ezmlmrc(5) file from the ezmlm bin directory to ..eezzmmllmmrrcc in | |
| your ..qqmmaaiill file base directory (usually your home directory): | |
| % cp /usr/local/bin/ezmlm/ezmlmrc ~/.ezmlmrc | |
| The base eezzmmllmmrrcc((55)) file lives in the ezmlm binary directory, which | |
| may differ from ``//uussrr//llooccaall//bbiinn//eezzmmllmm//eezzmmllmmrrcc'' if you do not have a | |
| default setup. If your system administrator has placed a ezmlmrc(5) | |
| file into the //eettcc directory, start with that one instead, as it is | |
| likely to already contain some useful local customization and | |
| comments. | |
| Now edit ~~//..eezzmmllmmrrcc. Find the tag corresponding to the text file you | |
| want to change, e.g. ``</text/mod-request/>'', and modify it | |
| appropriately. Some tags have conditional flags, so that succeeding | |
| text is copied only if specific switches are on/off. Thus, text | |
| succeeding ``</text/file#rms/>'' is copied into DDIIRR//tteexxtt//ffiillee if and | |
| only if the ezmlm-make(1) ``-rms'' switches are all used. For more | |
| info, see documentation in eezzmmllmmrrcc((55)) and the ezmlm-make(1) man page. | |
| To invoke a custom ..eezzmmllmmrrcc file, use the ezmlm-make(1) ``-c'' | |
| (custom) switch. | |
| 77..44.. CChhaannggiinngg ddeeffaauulltt mmooddeerraattoorr ddiirreeccttoorriieess.. | |
| See above. Edit the ..eezzmmllmmrrcc file to add a directory name to e.g. | |
| ``</modsub/#s>''. Also, you need to create that directory, and the | |
| subscribers subdirectory under it. NOTE: DDIIRR//mmoodd// is still required as | |
| the base directory for the message moderation queue. | |
| 77..55.. AAddaappttiinngg eezzmmllmm--mmaakkee ffoorr vviirrttuuaall ddoommaaiinnss.. | |
| This is not necessary if you use qmail>=1.02 and ezmlm-idx>=0.32. | |
| The problem with virtual domains is that ezmlm-make(1) by default puts | |
| the list name in DDIIRR//iinnllooccaall. However, if the domain host1.dom.com is | |
| controlled by the user ``virt'', then the local part of the address | |
| for the list list@host.dom.com will be ``virt-list'', not ``list''. | |
| This is easily accommodated by putting a ..eezzmmllmmrrcc file in ~~vviirrtt//. In | |
| the ``</inlocal/>'' section of this file, enter ``virt-<#L#>'' instead | |
| of ``<#L#>''. Now, all lists created under ~~vviirrtt will be | |
| automatically set up correctly. | |
| Similarly, if host1.dom.com is controlled by virt-dom1 and | |
| host2.dom.com by ``virt-dom2'', inlocal for list list@host1.dom.com | |
| should be ``virt-dom1-list'' and for list@host2.dom.com should be | |
| ``virt-dom2-list''. To accommodate this, put ``virt-<#1#>-<#L#>'' in | |
| ``</inlocal/>''. | |
| Running: | |
| % ezmlm-make -c ~virt/LIST ~virt/.qmail-dom1-list \ | |
| list host1.dom.com | |
| will produce a LLIISSTT//iinnllooccaall of virt-dom1-list by substituting the | |
| first part between two ``-'' (dom1) for ``<#1#>''. Two levels of | |
| dashes are accommodated, i.e. ``<#2#>'' will be replaced by the second | |
| part between two ``-'' (in this case empty (_S_i_c_!)). For more info, | |
| see ezmlm-make(1) and comments in eezzmmllmmrrcc. | |
| 77..66.. SSeettttiinngg uupp eezzmmllmm--mmaakkee ffoorr ssppeecciiaall ssiittuuaattiioonnss.. | |
| Ezmlm-make is very flexible. There are only three sets of special | |
| command line switches: ``-vV'' for version info, ``-cC'' controlling | |
| the use of a custom file ..eezzmmllmmrrcc in the ``dot'' directory, and | |
| ``-eE'' for edit mode (i.e. reconfiguration of existing list setups). | |
| All other switches are soft, i.e. controlled through eezzmmllmmrrcc((55)). Many | |
| switches, have special meanings via eezzmmllmmrrcc((55)) and are documented in | |
| the man page. Any other switches can be used for customization (_N_O_T_E_: | |
| _w_e _m_a_y _u_s_e _s_w_i_t_c_h_e_s _o_t_h_e_r _t_h_a_n _`_`_-_x_y_z_'_' _f_o_r _s_p_e_c_i_f_i_c _p_u_r_p_o_s_e_s _i_n | |
| _f_u_t_u_r_e _v_e_r_s_i_o_n_s_.) The ``-xyz'' switches will always be available for | |
| your use, with the ``-x'' switch being configured for some | |
| demo/special features in the distributed eezzmmllmmrrcc((55)). You can use them | |
| for anything you like. They are by default off=false. The complement | |
| of these switches is ``-XYZ'' (by default on=true). You can use these | |
| to cause specific changes in the list setup if a given switch is used. | |
| For an example, see the ``-x'' switch as used and documented in the | |
| default eezzmmllmmrrcc((55)) file. The switches ``-aip'' are set by default to | |
| be backwards compatible with ezmlm-0.53. Other switches are ``off'' by | |
| default. | |
| Switches ``-a-z'' and ``-A-Z'' take no arguments. Switches ``-0'' and | |
| and ``-3-9'' take arguments. When the ezmlm-make(1) ``-+'' switch is | |
| used, the current settings for all these switches are read from the | |
| list's DDIIRR//ccoonnffiigg (if available). | |
| 88.. RReessttrriiccttiinngg mmeessssaaggee ppoossttiinngg ttoo tthhee lliisstt.. | |
| 88..11.. RReeqquuiirriinngg tthhee lliisstt aaddddrreessss iinn TToo:://CCcc:: hheeaaddeerrss.. | |
| SPAM or junk mail is usually sent by mailing a single message to a | |
| large number of (unwilling) recipients. As such, it usually does not | |
| contain the E-mail address of all recipients (remember, junk mailers | |
| pay for these address lists). By rejecting messages that do not have | |
| the list address in the To: or Cc: header(s) a large fraction of spam | |
| to the list can be filtered out. | |
| This filter function is activated by default, but will work only if | |
| you specify the list directory on the ezmlm-reject(1) command line. To | |
| disable this restriction, remove the ``DIR'' argument from the ezmlm- | |
| reject(1) command line, or add the ``-T'' switch. | |
| By default, this error is logged, and an error message is sent to the | |
| sender. Since virtually all the failures will be SPAM and virtually | |
| all spam has a faked SENDER, most of these error messages will go to | |
| the postmaster. Thus, you may want to use the ezmlm-reject ``-q'' | |
| switch (quiet) to suppress the sender notification. | |
| 88..22.. RReejjeeccttiinngg mmeessssaaggeess sseenntt ffrroomm ootthheerr mmaaiilliinngg lliissttss.. | |
| ezmlm automatically detects are rejects messages that are sent from | |
| other ezmlm mailing lists. Some other mailing list managers do not use | |
| a rigorous mechanisms to verify subscribers. Thus, it is possible to | |
| subscribe an ezmlm list address to such a mailing list. You can easily | |
| block such a list by adding the address to the ``deny'' if you use the | |
| ezmlm-make(1) ``-k'' option. However, you can also configure ezmlm- | |
| reject(1) to reject messages based on specific headers placed into | |
| DDIIRR//hheeaaddeerrrreejjeecctt. A set of headers which will catch mailing list | |
| managers known to us are listed in the ezmlm-reject(1) man page. To | |
| activate this option, you must specify the ``-h'' switch and DDIIRR on | |
| the ezmlm-reject(1) line in DDIIRR//eeddiittoorr. Naturally, you can make this | |
| the default by editing ezmlmrc(5) (See ``Customizing ezmlm-make | |
| operation''). | |
| 88..33.. RReessttrriiccttiinngg ppoossttss bbaasseedd oonn tthhee SSuubbjjeecctt lliinnee.. | |
| ezmlm-reject(1) is by default configured to reject posts with empty | |
| subject (``-s'' switch) or with a subject that consists of only an | |
| administrative command word (``-c'' switch), such as ``subscribe''. To | |
| remove these restrictions, use the ezmlm-reject(1) ``-S'' and ``-C'' | |
| switch, respectively. You can also into DDIIRR//eeddiittoorr before the ezmlm- | |
| send(1) line add: | |
| | grep -i 'subject:' | grep -if DIR/bad_words >/dev/null && \ | |
| {echo "bad words found"; exit 100; } | |
| to reject messages that have a line matching ``Subject:'' followed by | |
| any bad word listed in DDIIRR//bbaadd__wwoorrddss. | |
| 88..44.. RReessttrriiccttiinngg tthhee ssiizzee ooff ppoossttss.. | |
| If the ``DIR'' argument is specified on the ezmlm-reject(1) line in | |
| DDIIRR//eeddiittoorr and DDIIRR//mmssggssiizzee exists and contains a number (in bytes) | |
| greater than ``0'', then any posts with a body larger than the number | |
| specified is rejected. The maximum message size can optionally be | |
| followed by ``:'' and a minimum message body size in bytes. For | |
| moderated lists, messages that are too large are rejected and not sent | |
| to the moderators. This feature can be used to prevent the posting an | |
| entire digest to the list by setting DDIIRR//mmssggssiizzee slightly below the | |
| message size set in your ezmlm-tstdig(1) innovation (if any). A | |
| minimum size can catch a few administrative request sent to the main | |
| list, but is otherwise not that useful. To always configure your lists | |
| with a message size restriction, add to eezzmmllmmrrcc((55)): | |
| </msgsize/> | |
| max:min | |
| The ezmlm-make(1) ``-x'' switch adds this with 40000:2. | |
| 88..55.. RReessttrriiccttiinngg ppoossttss bbaasseedd oonn MMIIMMEE ccoonntteenntt--ttyyppee.. | |
| ezmlm-reject(1) will look for DDIIRR//mmssggssiizzee, DDIIRR//mmiimmeerreejjeecctt, and | |
| DDIIRR//mmiimmeerreemmoovvee if the ``DIR'' argument is specified (``DIR'' can be | |
| left out to conserve resources on lists that do not use these | |
| features). _N_o_t_e_: _T_h_e _`_`_D_I_R_'_' _a_r_g_u_m_e_n_t _i_s _a_l_s_o _r_e_q_u_i_r_e_d _f_o_r _t_h_e _t_h_e | |
| _T_o_:_/_C_c_: _l_i_s_t _a_d_d_r_e_s_s _r_e_s_t_r_i_c_t_i_o_n _(_s_e_e _`_`_R_e_q_u_i_r_i_n_g _t_h_e _l_i_s_t _a_d_d_r_e_s_s _i_n | |
| _T_o_:_/_C_c_: _h_e_a_d_e_r_s_'_'_)_. If the message contains MIME parts that are of a | |
| content-type listed in DDIIRR//mmiimmeerreejjeecctt they are rejected. If the | |
| message is a simple MIME message of a content-type listed in either | |
| DDIIRR//mmiimmeerreejjeecctt or DDIIRR//mmiimmeerreemmoovvee it is also rejected. | |
| There is currently no ezmlm-make(1) switch for DDIIRR//mmiimmeerreejjeecctt, but it | |
| can easily be configured by editing eezzmmllmmrrcc((55)). The ezmlm-make ``-x'' | |
| switch configures DDIIRR//mmiimmeerreemmoovvee (see ``mimeremove'') for a list of | |
| content-types). Messages consisting solely of these content-types | |
| (rare) will be rejected, and the corresponding MIME parts of composite | |
| messages will be removed. | |
| 88..66.. RReessttrriiccttiinngg ppoossttss ttoo lliisstt ssuubbssccrriibbeerrss.. | |
| Use message moderation. As an alternative, implement a check against | |
| SENDER by using ezmlm-issubn(1). The latter is easily defeated by | |
| faking SENDER. Also, it prevents posts from legitimate subscribers | |
| that are subscribed under a different address than the one they send | |
| from. Nevertheless, it may be useful in some situations. Add: | |
| |/usr/local/bin/ezmlm/ezmlm-issubn 'DIR' 'DIR/digest' 'DIR/allow' || | |
| { echo "Sorry, you are not allowed to post to this list."; | |
| exit 100; } | |
| _A_L_L _O_N _O_N_E _L_I_N_E to DDIIRR//eeddiittoorr before the ezmlm-send(1) line. ``DIR'' | |
| is the main list directory. If your ezmlm binaries live in a different | |
| directory, change the ezmlm-issubn(1) path accordingly. If you would | |
| like denied posts to be dropped silently rather than bounced, change | |
| the exit code to 99. | |
| See ``Customizing ezmlm-make operation'' if you want your lists to | |
| have some of these features by default or set by specific ezmlm- | |
| make(1) switches. The ezmlm-make(1) ``-u'' switch by default sets up | |
| restrictions this way. | |
| If you do not want to allow digest subscribers to post, remove | |
| DDIIRR//ddiiggeesstt// from the ezmlm-issubn command line. To allow posts from an | |
| address that is not a subscriber, simply add it to the addresses in | |
| DDIIRR//aallllooww//: | |
| % ezmlm-sub DIR allow address@host | |
| The ``allow'' database can be manipulated remotely by sending mail to | |
| list-allow-subscribe@listhost, list-allow-unsubscribe@listhost, etc. | |
| If configured for the list, the ``-list'' command for remote adminis- | |
| trators will work for the ``allow'' database as well. | |
| Please note that this setup is not secure, as it is easy to modify the | |
| envelope SENDER. For more secure options, see ``Restricting posts to | |
| an arbitrary set of E-mail addresses (higher security option)''. | |
| 88..77.. RReessttrriiccttiinngg ppoossttss ttoo aann aarrbbiittrraarryy sseett ooff EE--mmaaiill aaddddrreesssseess | |
| ((hhiigghheerr sseeccuurriittyy ooppttiioonn)).. | |
| The easiest way to achieve this is to simply set up a message | |
| moderated list, and add all the e-mail addresses to the moderator db. | |
| Use a custom location, if you want a different set of moderators for | |
| subscription moderation/remote admin. If a "moderator" posts, only | |
| s/he will get a confirmation request. If anybody else posts, the post | |
| will be sent to all moderators. | |
| To directly bounce posts from SENDERs not in the database, use the | |
| ezmlm-store ``-P'' (not public) switch. This is more secure than a | |
| simple ezmlm-issubn(1) construct, since faking SENDER to a moderator | |
| address will result in a confirmation request to that moderator (which | |
| s/he will reject/ignore), rather than a direct post. The draw-back is | |
| that each post has to be confirmed, but with the speed of ezmlm the | |
| request will arrive immediately after the post is made, so the | |
| overhead should is The best choice depends on your particular needs in | |
| the trade-off between security and convenience. | |
| ``ezmlm-make -om'' will set up such a moderated list with ``ezmlm- | |
| store -P''. This is the most useful setup for an announcement list. | |
| Setting a list up in this way with only the owner's address gives you | |
| a pretty safe owner-only list. | |
| 88..88.. CCoommpplleetteellyy rreessttrriiccttiinngg ppoossttss.. | |
| To completely prevent posting (for instance a message-of-the-day | |
| list), set up a normal list, and just remove ~~//..qqmmaaiill--lliisstt and | |
| DDIIRR//eeddiittoorr altogether. Make posts from the shell, or from shell | |
| scripts or crond, by simply piping a (complete) message to ezmlm- | |
| send(1): | |
| % /usr/local/bin/ezmlm/ezmlm-send DIR < message | |
| _N_O_T_E: This can be done by any user with write access to files within | |
| the list directory, so make sure your file modes are set correctly. | |
| The ezmlm-send(1) path may need to be changed to match your ezmlm | |
| binary directory. It's also a good idea to not allow others to read | |
| your list directory and DDIIRR//ssuubbssccrriibbeerrss// and other address lists. | |
| 88..99.. AA ggeenneerraall ssoolluuttiioonn ttoo rreessttrriiccttiinngg ppoossttss bbaasseedd oonn SSEENNDDEERR.. | |
| As discussed above, the security afforded by SENDER checks is minimal, | |
| but nevertheless sufficient to keep out most spam and garbage. | |
| However, some subscribers post from e-mail addresses other than their | |
| subscription address, and users tend to become unfriendly when their | |
| posts are denied even though they are subscribers. This is a general | |
| solution to this problem which has minimal overhead for the list owner | |
| and is essentially completely transparent to the subscriber. | |
| Set up the list with ezmlm-gate(1) in DDIIRR//eeddiittoorr in place of the | |
| ezmlm-send(1) line. To the ezmlm-gate(1) command line add the list | |
| directory twice, then a digest directory DDIIRR//ddiiggeesstt// (if it exists), | |
| then DDIIRR//aallllooww//. Create DDIIRR//mmooddppoosstt. Add the list owner as a message | |
| moderator. | |
| With this setup, any message from a SENDER that is a subscriber of the | |
| main list, the digest list or added to DDIIRR//aallllooww//, will be posted | |
| directly, others will be sent to the list owner for approval. If the | |
| list wants to automatically approve posts from that address in future | |
| (e.g. it is an alias for a subscriber) s/he just adds it to the | |
| database in DDIIRR//aallllooww//. If the owner wants to approve this post, but | |
| not necessarily future posts from that address, s/he just accepts the | |
| message. To reject the message with a comment is equally easy. If the | |
| owner wished to have the option to silently ignore posts (and not have | |
| the SENDER notified that the post timed out), just add the ezmlm- | |
| clean(1) ``-R'' switch in DDIIRR//eeddiittoorr and DDIIRR//mmooddeerraattoorr. | |
| In this way, the normal subscriber is always happy and the ``behind | |
| the scenes'' work of the owner is minimalized. | |
| ezmlm-make creates lists with this setup if you specify the ``-u'' | |
| switch in addition to the ``-m'' switch: | |
| % ezmlm-make -mu ~/list ~/.qmail-list joe-list host | |
| If you omit the ``-m'' switch, the setup will reject posts from non- | |
| subscribers that are not in the ``allow'' database. ezmlm-both(1) | |
| uses a set of similar ezmlm-make(1) invocations to create a list with | |
| digest, optionally making you a remote admin, list owner, and | |
| subscriber to both lists. | |
| 99.. CCuussttoommiizziinngg oouuttggooiinngg mmeessssaaggeess.. | |
| 99..11.. AAddddiinngg aa ttrraaiilleerr ttoo oouuttggooiinngg mmeessssaaggeess.. | |
| Put the text in DDIIRR//tteexxtt//ttrraaiilleerr. The text is NOT copied to the | |
| archived version of the message. This works also for sublists. Tags | |
| ``<#h#>'', ``<#l#>'', and ``<#n#>'' are replaced by the list host, | |
| local name, and current message number, respectively. | |
| 99..22.. AAddddiinngg aa ssuubbjjeecctt pprreeffiixx ttoo oouuttggooiinngg mmeessssaaggeess.. | |
| Put the exact text in DDIIRR//pprreeffiixx. You can include the message number | |
| assigned to the post in the list archive by adding the ``#'' character | |
| in the text in DDIIRR//pprreeffiixx (example: put ``lsqb;listname-#rsqb;'' in | |
| DDIIRR//pprreeffiixx). ezmlm does not modify the subject other than by | |
| prefixing it with the prefix. ezmlm knows about rfc2047 encoded | |
| subject and can detect a prefix within an encoded word. However, ezmlm | |
| will not modify the subject itself. It will add a prefix only of none | |
| has been added before. A consequence of this is that a message will | |
| have the message number prefix of the first message in the thread | |
| rather than a prefix with the number of the message itself. The entire | |
| thread can always be retrieved with a message to list-thread-x@host, | |
| where ``x'' is the number in the prefix. | |
| We recommend against using the prefix feature and strongly against the | |
| message number prefix. If you use it, make sure you understand the | |
| drawbacks, of message modification and subjects that change between | |
| message and reply. ezmlm can deal with this, but other programs may | |
| not be able to. | |
| Sublists ignore DDIIRR//pprreeffiixx. | |
| If you add a prefix, especially if you previously added it by other | |
| means (procmail, etc.), use ezmlm-idx to re-index the archive. Due to | |
| the way ezmlm-get(1) does threading from the subject, it works best if | |
| you use exactly the same prefix as you did before. | |
| 99..33.. AAddddiinngg aa hheeaaddeerr ttoo oouuttggooiinngg mmeessssaaggeess.. | |
| Put the exact header text as a line in DDIIRR//hheeaaddeerraadddd. Thus, if you'd | |
| like a ``Precedence: bulk'' header added to outgoing messages, put a | |
| line ``Precedence: bulk'' into DDIIRR//hheeaaddeerraadddd. This particular header | |
| is already added via the default ezmlmrc(5). Any modifications you | |
| wish to be active for all future lists should be made via modification | |
| of ezmlmrc(5) (see ``Customizing ezmlm-make operation''). As of | |
| ezmlm-idx-0.32, the following tags can be used in DDIIRR//hheeaaddeerraadddd, and | |
| will be substituted: <#n#> for the current message number, <#l#> for | |
| the local part of the list (this will be the digest list for digests), | |
| <#h#> for the host part of the list name. These substitutions are done | |
| at the time of message delivery, in contrast to the ``capital letter'' | |
| tags substituted by ezmlm-make(1) when the list is set up. | |
| 99..44.. AAddddiinngg aa mmeessssaaggee nnuummbbeerr hheeaaddeerr.. | |
| Don't! A sequence header may be useful for users whose systems don't | |
| pass on the ``Return-to:'' header to the MUA. | |
| Use DDIIRR//hheeaaddeerraadddd with a header of the type ``X-Sequence: <#n#>''. | |
| Bounced messages are identified by their local message numbers, i.e. | |
| when ezmlm sends you a message about which messages bounced, it refers | |
| to the message number of the sublist. To be consistent with these | |
| numbers, and a local sublist archive, use DDIIRR//sseeqquueennccee on the sublist, | |
| not the main list. To get consistent message numbering in digests, | |
| digest have the message number of the first message in the digest. | |
| ezmlm-idx tries to make message numbering problems with sublists a | |
| little easier: sublists use the incoming message number, but only when | |
| the sublist is not archived and not indexed. This restriction is | |
| necessary for security reasons. Otherwise, an attacker could wreak | |
| havoc in the local message archive by sending messages with faked | |
| message numbers in the SENDER. | |
| 99..55.. RReemmoovviinngg hheeaaddeerrss ffrroomm oouuttggooiinngg mmeessssaaggeess.. | |
| Put the header up to, but excluding the ``:'' in DDIIRR//hheeaaddeerrrreemmoovvee. | |
| 99..66.. RReemmoovviinngg MMIIMMEE ppaarrttss ffrroomm mmeessssaaggeess.. | |
| ezmlm-idx>=0.30 can strip parts from composite mime messages based on | |
| content type. Just put the appropriate content-types such as | |
| ``text/ms-word'' or ``text/html'' into DDIIRR//mmiimmeerreemmoovvee. This is | |
| automatically configured when using the ezmlm-make(1) ``-x'' switch. | |
| 99..77.. LLiimmiittiinngg ````RReecceeiivveedd::'''' hheeaaddeerrss iinn oouuttggooiinngg mmeessssaaggeess.. | |
| Sendmail still is being used on the majority of mail hubs. Sendmail | |
| has very primitive loop detection, bouncing messages based on | |
| excessive ``hopcount''. The ``hopcount'' is determined by counting | |
| ``Received:'' headers. ezmlm by default propagates ``Received:'' | |
| headers to facilitate message tracking. Thus, messages, especially | |
| from a sublist, can have a number of ``Received:'' headers that | |
| exceeds the ``hopcount'' set on poorly configured sendmail hosts. | |
| Subscription confirmation requests, warning, and probe messages have | |
| fewer ``Received:'' headers. Thus, a user may be able to receive | |
| these, but not (some of the) list messages. Of course, the best is to | |
| correct the configuration on the bouncing host, but this is often | |
| under the control of neither list owner nor user. | |
| To compensate for this problem, ezmlm-send(1) of ezmlm-idx->=0.313 by | |
| default removes all ``Received:'' headers except the top one. They | |
| are still written to the archive, an can be retrieved from there using | |
| the ``-getv'' command. To cause ezmlm-send(1) to pass on all the | |
| ``Received:'' headers, use the ezmlm-send(1) ``-r'' switch. | |
| 99..88.. SSeettttiinngg ````RReeppllyy--TToo:: lliisstt@@hhoosstt''''.. | |
| This is not recommended, since it leads to dissemination via the list | |
| of messages returned from bad auto-responders and MTAs. Also, it may | |
| lead to public replies to the list where personal replies were | |
| intended. In addition, the original ``Reply-To:'' header is lost. If | |
| you do want to add a reply-to list header, put ``reply-to'' into | |
| DDIIRR//hheeaaddeerrrreemmoovvee, and ``Reply-To: list@host.dom'' into DDIIRR//hheeaaddeerraadddd. | |
| 99..99.. CCoonnffiigguurriinngg tthhee lliisstt ssoo ppoossttss aarree nnoott ccooppiieedd ttoo tthhee oorriiggiinnaall | |
| sseennddeerr.. | |
| For most mailing lists, you want all subscribers, including the sender | |
| of a particular message, to get all messages. This way, the sender | |
| sees that the message reached the list. For small lists, such as a | |
| project group, it may be annoying for the members to receive their own | |
| posts. | |
| ezmlm-send(1) can be configured to exclude the sender from the | |
| recipient E-mail addresses if configured with the ``-C'' switch. To | |
| add this switch, edit the ezmlm-send(1) line of DDIIRR//eeddiittoorr. | |
| 99..1100.. CCuussttoommiizziinngg eezzmmllmm nnoottiiffiiccaattiioonn mmeessssaaggeess.. | |
| Most of ezmlm's more commonly used messages are stored in DDIIRR//tteexxtt//. | |
| These messages can be edited manually for a list once it is set up, or | |
| on a global basis via modification of eezzmmllmmrrcc((55)). The messages may | |
| also be edited via E-mail by remote administrators (remote admin must | |
| also be enabled - ezmlm-make switch ``-r'') after the list is | |
| established by creating the list using the ezmlm-make(1) ``-n'' (new | |
| text files) (see ``How text file editing works'' and see ``Customizing | |
| ezmlm-make operation''). | |
| The most useful messages are DDIIRR//tteexxtt//ssuubb--ookk (and for subscription | |
| moderated lists DDIIRR//tteexxtt//mmoodd--ssuubb) for new subscriber information (such | |
| as the traditional ``welcome'' message, or a list charter or list | |
| posting rules/guidelines); DDIIRR//tteexxtt//uunnssuubb--nnoopp is useful for messages | |
| to frustrated users unsuccessful in their unsubscribe attempts; | |
| DDIIRR//tteexxtt//hheellpp for general help information in reply to list-help@host | |
| or unrecognized commands, DDIIRR//tteexxtt//bboottttoomm for inclusion at the bottom | |
| of virtually all ezmlm messages; DDIIRR//tteexxtt//mmoodd--hheellpp for moderator | |
| information; DDIIRR//tteexxtt//ttrraaiilleerr for a (few) line(s) at the bottom of | |
| each post; DDIIRR//tteexxtt//ddiiggeesstt for information in the ``Administrivia'' | |
| section of digests. | |
| 99..1111.. SSppeecciiffyyiinngg cchhaarraacctteerr sseett aanndd ccoonntteenntt--ttrraannssffeerr--eennccooddiinngg ffoorr oouutt-- | |
| ggooiinngg eezzmmllmm mmeessssaaggeess.. | |
| All ezmlm replies, except errors handled directly by qmail, can be | |
| sent in any character set and optionally with quoted-printable or | |
| base64 content-transfer-encoding. DDIIRR//tteexxtt// files are always 8-bit | |
| files, but even though qmail has no problems with 8-bit mail, other | |
| MTAs and MUAs do. Problems due to this can be avoided by assuring | |
| that outgoing ezmlm messages are 7bit by using the appropriate | |
| content-transfer-encoding. | |
| To specify a character set, put the name in DDIIRR//cchhaarrsseett (default: us- | |
| ascii). To specify quoted-printable or base64 content-transfer- | |
| encoding, add ``:Q'' or ``:B'' after the character set name in | |
| DDIIRR//cchhaarrsseett. | |
| 1100.. CCuussttoommiizziinngg aarrcchhiivvee rreettrriieevvaall.. | |
| 1100..11.. SSppeecciiffyyiinngg tthhee ffoorrmmaatt ffoorr rreettrriieevveedd mmeessssaaggeess.. | |
| Add a format (f) specifier after the archive retrieval command: | |
| list-getf@host | |
| where ``f'' is ``r'' for rfc1153 format, ``m'' (mime; default) for | |
| MIME multipart/digest with subset of ordered headers, and ``v'' (vir- | |
| gin) MIME multipart/digest, i.e. with all headers retained from the | |
| archive, and ``n'' (native) the same as ``v'' except that no threading | |
| is performed and messages are returned in numerical order. Under some | |
| circumstances, it may be preferable to have a digest in ``multi- | |
| part/mixed''. The ``x'' (mixed) format is identical to ``m'' except | |
| for this header. | |
| For ezmlm-cron(1), just suffix the format code to the digest code. | |
| 1100..22.. SSppeecciiffyyiinngg tthhee ddeeffaauulltt ffoorrmmaatt ffoorr ddiiggeessttss aanndd aarrcchhiivvee | |
| rreettrriieevvaall.. | |
| The ezmlm-get(1) ``-f'' switch can be used to change the default | |
| format (MIME with removal of less relevant headers) to other formats. | |
| The format specifiers are the same as for individual archive | |
| retrievals (see ``Specifying the format for retrieved messages''). | |
| 1100..33.. LLiimmiittiinngg tthhee nnuummbbeerr ooff mmeessssaaggeess ppeerr --ggeett//--iinnddeexx rreeqquueesstt.. | |
| By default, a single -get request returns a maximum of 100 messages, | |
| and a single -index request 2000 subjects entries (20 files of 100 | |
| subjects entries each). This can be changed by editing MAXGET, and | |
| MAXINDEX in iiddxx..hh and recompiling. Remember to edit tteexxtt//bboottttoomm, | |
| tteexxtt//bboouunnccee, and eezzmmllmmrrcc((55)) to reflect these changes so that your | |
| users won't get confused. | |
| 1111.. RReessttrriiccttiinngg aarrcchhiivvee rreettrriieevvaall.. | |
| 1111..11.. RReessttrriiccttiinngg aarrcchhiivvee aacccceessss ttoo ssuubbssccrriibbeerrss.. | |
| If you use ezmlm-get(1), archive retrieval can be restricted by using | |
| the ezmlm-make(1) ``-g'' (guard archive) switch. This in turn sets | |
| ezmlm-get(1) up with its ``-s'' switch, allowing access only to | |
| addresses that are subscribers of the list, or of the digest list, or | |
| that are present in an extra address database stored in DDIIRR//aallllooww//. | |
| Addresses can be added remotely by mailing list-allow- | |
| useralias=userhost@listhost. Other commands, such as ``subscribe'' | |
| work as expected. As you can see, the different programs have many | |
| options and ezmlm-make(1) organizes most of them into the most useful | |
| sets to make it easier. Don't hesitate to look at the ezmlmrc(5) man | |
| page and man pages for individual commands. There are many useful | |
| options to more finely tune your lists to your taste. Via modification | |
| of ezmlmrc(5) you can make your favorite options the default! | |
| Since ezmlm-get always sends the reply to SENDER, this assures that | |
| only subscribers can get archive excerpts. Since SENDER is easily | |
| faked, anyone can still request archive info (and drain system | |
| resources), but replies go only to subscriber E-mail addresses. The | |
| DDIIRR//aallllooww// database can be used to manually add addresses that should | |
| be given archive access, but are not subscribers. This may be an | |
| address of a subscriber who posts from an address other than his or | |
| her subscription address. | |
| 1111..22.. RReessttrriiccttiinngg aavvaaiillaabbllee aarrcchhiivvee rreettrriieevvaall ccoommmmaannddss.. | |
| If you want to disable all archive retrieval except digest creation, | |
| simply add the ``-C'' command line switch to the ezmlm-get(1) line in | |
| DDIIRR//mmaannaaggeerr. If you don't want digest creation via trigger messages | |
| and DDIIRR//mmaannaaggeerr, but use other means to created digests, you can | |
| remove the ezmlm-get(1) line from DDIIRR//mmaannaaggeerr. | |
| 1111..33.. RReessttrriiccttiinngg aarrcchhiivvee rreettrriieevvaall ttoo mmooddeerraattoorrss.. | |
| If DDIIRR//ppuubblliicc does not exist, ezmlm-manage(1) and ezmlm-get(1) modify | |
| their behavior. They disallow user requests, but for remote | |
| administration lists, honor moderator requests. Thus, for a remote | |
| admin list without DDIIRR//ppuubblliicc, only subscription moderators or remote | |
| administrators can receive archive retrievals and only remote | |
| administrators can subscribe and unsubscribe user addresses. | |
| If you'd like this restriction of archive retrieval with maintained | |
| user-initiated ezmlm-manage(1) subscription functions, use the ezmlm- | |
| get(1) ``-P'' (not public) switch, and retain DDIIRR//ppuubblliicc. Also, look | |
| at the ezmlm-make ``-b'' switch. | |
| 1111..44.. AAlllloowwiinngg aarrcchhiivvee rreettrriieevvaall ffrroomm aa nnoonn--ppuubblliicc lliisstt.. | |
| A non-public list lacks DDIIRR//ppuubblliicc. ezmlm-manage(1) will reject user | |
| requests for (un) subscription and for archive retrieval. The | |
| restriction on archive retrieval can be removed with the ezmlm-get(1) | |
| ``-p'' (public) switch. | |
| 1122.. CCuussttoommiizziinngg ddiiggeessttss.. | |
| 1122..11.. SSeettttiinngg uupp aa ddiiggeesstt lliisstt.. | |
| Digests are integrated with normal ezmlm lists if you use ezmlm- | |
| idx>=0.30. Just add the ezmlm-make(1) ``-d'' switch to your list | |
| setup. To add digests to an existing list created with ezmlm-idx>=0.23 | |
| use: | |
| % ezmlm-make -+d DIR | |
| For ezmlm-0.53 or older lists, you just need to re-specify also other | |
| switches and the other ezmlm-make(1) arguments. | |
| 1122..22.. GGeenneerraattiinngg ddaaiillyy ddiiggeessttss.. | |
| The easiest way to generate trigger messages is to use crond(8) and | |
| execute ezmlm-get(1) daily. To do this, create the list with: | |
| ezmlm-make -d dir dot local host | |
| and add a line to your crontab file: | |
| 30 04 * * * ezmlm-get dir | |
| and execute crontab(1). This will generate a digest each day at 04:30 | |
| am. In addition, a digest will be generated at any time when the lat- | |
| est post makes it more than 30 messages or more than 64 kbytes of mes- | |
| sage body since the latest digest. If you do not want these extra | |
| digests, edit DDIIRR//eeddiittoorr and remove the ezmlm-tstdig(1) and ezmlm- | |
| get(1) lines. | |
| If you do not need the digests to go out at a particular time, use the | |
| standard setup, but edit DDIIRR//eeddiittoorr to put ``-t 24'' on the ezmlm- | |
| tstdig(1) line instead of the default ``-t 48'' for 48 hours. This is | |
| even easier. You can modify all parameters by editing eezzmmllmmrrcc or by | |
| using the ezmlm-make(1) ``-4'' argument when creating/editing the | |
| list. This is described in the ezmlm-make(1) man page, and the options | |
| etc, are described in the ezmlm-tstdig(1) man page. | |
| 1122..33.. GGeenneerraattiinngg tthhee ffiirrsstt ddiiggeesstt.. | |
| If you want the first digest to start with issue 1 and the first | |
| message in your archive, no special action is required. | |
| If you want the first digest to start at message 123 and you have | |
| shell access, put '122' into DDIIRR//ddiiggnnuumm. | |
| If you want the next digest to start at message 456, you can always | |
| edit DDIIRR//ddiiggnnuumm to contain '455'. If you want the next digest to be | |
| named issue 678, put '677' into DDIIRR//ddiiggiissssuuee. | |
| 1122..44.. AAddddiinngg ssttaannddaarrdd aaddmmiinniissttrraattiivvee iinnffoorrmmaattiioonn ttoo ddiiggeessttss.. | |
| The text in DDIIRR//tteexxtt//ddiiggeesstt is copied into the ``Administrivia'' | |
| section of the digest. This information can be customized on a | |
| system-wide basis by editing //eettcc//eezzmmllmmrrcc, on a user-wide basis by | |
| editing ~~//..eezzmmllmmrrcc, or for the list by directly editing the | |
| DDIIRR//tteexxtt//ddiiggeesstt file, or by a remote administrator by editing the file | |
| via e-mail, if the list has been set up using the ezmlm-make(1) | |
| ``-nr'' switches (see ``How text file editing works''). | |
| 1122..55.. CCoonnttrroolllliinngg tthhee ddiiggeesstt ffoorrmmaatt.. | |
| You can control the default format that ezmlm-get(1) uses for its | |
| output by using the ``-f x'' switch. For individual digests triggered | |
| by mail or other archive access, add a format specifier after the | |
| digestcode: | |
| list-dig.codef@host | |
| For example: | |
| joe-sos-dig.gagax@id.com | |
| where ``x'' is ``r'' for rfc1153 format, ``m'' (default) for MIME mul- | |
| tipart/digest with a subset of headers, ``v'' for virgin MIME multi- | |
| part/digest, i.e. with all headers retained from the archive, ``n'' | |
| produces format similar to ``v'', without threading and with messages | |
| in numerical order. The ``x'' format is identical to the default ``m'' | |
| format, but the digest content-type is ``multipart/alternative'' | |
| rather than ``multipart/digest''. This helps with a pine bug if you | |
| are using quoted-printable/base64 encoding of ezmlm messages. | |
| With digests triggered directly from crond(8), just use the ``-f'' | |
| format specifier: | |
| ezmlm-get -fx DIR | |
| The same switch can also be used for standard digest triggering from | |
| DDIIRR//eeddiittoorr. Just add the ``-fx'' switch to the ezmlm-get(1) command | |
| line there. Edit ~~//eezzmmllmmrrcc to assure that such customizations will be | |
| used for future list creations/edits. | |
| 1122..66.. CCuussttoommiizziinngg bboouunnccee hhaannddlliinngg.. | |
| The time out for bounce messages is normally 11.6 days. This means | |
| that a bad address will take longer that 3 weeks to be removed. | |
| Usually, this delay is desirable. After all, it is much worse to | |
| remove a subscriber just because the address had temporary problems | |
| that to send a few extra messages and receive a few extra bounces. | |
| However, for large lists, bounce handling can consume a considerable | |
| amount of resources. To decrease the load, remove all ezmlm-warn(1) | |
| lines from the DDIIRR//eeddiittoorr, and DDIIRR//mmaannaaggeerr files. Instead, execute: | |
| /path/ezmlm-warn DIR | |
| /path/ezmlm-warn -d DIR | |
| daily during off-peak hours via a cron script. The second line can be | |
| omitted if you are not using the digest capability of the list. | |
| This should not be necessary for ezmlm-idx>=0.32. That version adds | |
| much more efficient bounce handling, making this type of modification | |
| usable only for extremely large lists with many bad addresses (unusual | |
| for ezmlm lists) and for hosts that are working near the limit of | |
| their capacity (where shifting some qmail load to off-peak hours is | |
| worth the effort). | |
| In addition, you may want to reduce the time out for bounces from 11.6 | |
| to a lower number of days, e.g. 5. To do so, add ``-t 5'' to the | |
| ezmlm-warn(1) command line. | |
| If you start with a list from a list manager that does not have bounce | |
| handling, chances are that you have many bad addresses in your list. | |
| You can always execute: | |
| /path/ezmlm-warn -t0 DIR | |
| /path/ezmlm-warn -d -t0 DIR | |
| to move bounce handling one step forward per execution. Users whose | |
| mail has bounced will be sent a warning. Users for whom the warning | |
| message has bounced will be sent a probe. | |
| 1133.. RReemmoottee aaddmmiinniissttrraattiioonn.. | |
| 1133..11.. HHooww ccaann II rreemmootteellyy aadddd mmooddeerraattoorrss,, ssuubbssccrriibbeerr aalliiaasseess,, eettcc?? | |
| On any list, the DDIIRR//aallllooww// database can be manipulated remotely via | |
| mail to list-allow-subscribe@listhost, etc. The rules for | |
| adding/removing/listing addresses to this database are the same as for | |
| the main list. Thus, if a user on an open list wants to be able to | |
| post from alias@al.host.com s/he can send a message to list-allow- | |
| subscribe-alias=al.host.com@listhost and reply to the confirmation | |
| request. Now, s/he can post from this address even on a subscriber- | |
| only list and even though the address is not a real subscriber. | |
| It can be confusing to some users that you use ``subscribe'' here, but | |
| you don't get any messages. If you explain to them that this is just | |
| another collection of addresses they will understand. You can also | |
| send the initial message on their behalf. If you are a remote admin, | |
| you can even complete the transaction adding the alias without | |
| subscriber participation. | |
| Addresses can also be unsubscribed from the ``allow'' database. | |
| However, there is usually no good reason to do so. | |
| If configured, the DDIIRR//ddeennyy// database can be manipulated, but only by | |
| remote administrators, by mail to e.g. list-deny- | |
| baduser=badhost@listhost. Normal users cannot access this database. | |
| To remotely administrate the DDIIRR//mmoodd// databases (i.e., without shell | |
| access), you need to set up a non-public, remotely administered list | |
| which ``resides'' within the DDIIRR//mmoodd. _P_l_e_a_s_e _c_a_r_e_f_u_l_l_y _c_o_n_s_i_d_e_r _t_h_e | |
| _i_m_p_l_i_c_a_t_i_o_n_s _o_f _m_a_k_i_n_g _i_t _p_o_s_s_i_b_l_e _t_o _r_e_m_o_t_e_l_y _a_d_d_, _r_e_m_o_v_e_, _a_n_d _l_i_s_t | |
| _m_o_d_e_r_a_t_o_r_s_. _I_n _m_a_n_y _c_i_r_c_u_m_s_t_a_n_c_e_s_, _t_h_i_s _i_s _d_a_n_g_e_r_o_u_s_. | |
| After setting up your list with the specific functionality you need, | |
| use the following command for DDIIRR//mmoodd//: | |
| % ezmlm-make -ePrIAl ~/list/mod ~/.qmail-list-mod joe-list-mod host | |
| The '-l' flag is not necessary, but makes it easier to administrate | |
| your moderator database by permitting the ``supermoderator'' to see | |
| who is on the list. | |
| The new list does not have a key. Using the key from the main list is | |
| inadvisable. Instead, create a dummy list, copy the key from this list | |
| to your ``moderator'' list: | |
| % cp ~/DUMMY/key ~/DIR/mod/key | |
| Erase the dummy list. Also, posts to this list should not be allowed. | |
| Erase the ~~//..qqmmaaiill--lliisstt--mmoodd and ~~//DDIIRR//mmoodd//eeddiittoorr. Then add the remote | |
| administrator of the ``moderator'' list: | |
| % ezmlm-sub ~/list mod/mod supermod@superhost | |
| The ``supermoderator'' can now remotely administrate the moderators of | |
| the main list. | |
| 1133..22.. MMooddeerraattiinngg ppoossttss ffrroomm aa sseeccoonnddaarryy aaccccoouunntt.. | |
| Request for moderation of posts can be forwarded to any address and | |
| acted on from that address. By default, all post moderation requests | |
| have subjects starting with ``MODERATE for'' followed by the list | |
| name. | |
| 1133..33.. MMooddeerraattiinngg ssuubbssccrriippttiioonn ffrroomm aa sseeccoonnddaarryy aaccccoouunntt.. | |
| Requests for moderator approval of user subscribe requests can be | |
| forwarded to any address and acted on from that address. All | |
| subscription moderation requests have subjects starting with | |
| ``CONFIRM'' (or ``CONFIRM subscribe to listname'', since ``CONFIRM | |
| unsubscribe from listname'' is sent to the moderator only in reply to | |
| a moderator-initiated request on a list with remote admin). | |
| Remote administration (initiation by the moderator of (un)subscribe | |
| requests on behalf of a user) CANNOT be initiated from an account that | |
| is not listed in the moderator database. If such attempts are made, | |
| these will be treated as regular requests, resulting in a confirm | |
| request to the user (which includes a copy of the initial request, | |
| revealing the moderator's address to the user). The user reply to a | |
| confirm request will on a non-moderated list result in the addition of | |
| the user address to the subscriber list, and in a moderated list a | |
| CONFIRM request to all the moderators. Replies to unsubscribe confirm | |
| requests always result in the removal of the address, without | |
| moderator intervention (except in some cases when the ezmlm-manage -U | |
| switch is used (see below)). With this caveat, moderation and remote | |
| administration can be done from a secondary address. | |
| For the subscription moderator to temporarily use a different address, | |
| s/he needs to forward all ``CONFIRM'' messages to the new address. For | |
| a permanent move, it is better to remove the old moderator address and | |
| add the new SENDER address to allow moderator-initiated (un)subscribes | |
| without user intervention from the new address (of course, the list | |
| has to be configured for remote administration with DDIIRR//rreemmoottee). | |
| 1133..44.. AAuuttoommaattiiccaallllyy aapppprroovviinngg ppoossttss oorr ssuubbssccrriippttiioonnss.. | |
| Sometimes, it may be desirable for the moderator to automatically | |
| approve all moderation requests. This may be appropriate for a single | |
| moderator of a ``civilized'' list when away for the week. | |
| Set up your client to auto-reply to the ``Reply-To:'' address for all | |
| messages with subjects ``CONFIRM subscribe to listname'' or ``MODERATE | |
| for listname''. Beware that this can be used by malicious people to | |
| trick your account to send mail anywhere. In practice, this should | |
| not be a problem. If you are worried, forward the messages to a | |
| (trusted) friend and ask him/her to appropriately reply to the | |
| requests. | |
| 1133..55.. AAlllloowwiinngg rreemmoottee aaddmmiinniissttrraattoorrss ttoo ggeett aa ssuubbssccrriibbeerr lliisstt.. | |
| Access to the subscriber list is sensitive. Thus, this option is | |
| disabled by default. The ezmlm-manage(1) ``-l'' command line switch | |
| enables this option, but will send a subscriber list only to a | |
| moderator's address. This allows a moderator to also initiate a | |
| subscriber list retrieval from a secondary account (i.e. one to which | |
| the moderator's mail is delivered, but for which SENDER is not a | |
| moderator). The latter option does not decrease security, as it is | |
| trivial to fake SENDER (see ``Ezmlm-idx security'' for a discussion of | |
| ezmlm-idx security aspects). | |
| For maximum subscriber list security, do not enable this feature. To | |
| enable this feature by default, just modify eezzmmllmmrrcc((55)) (see | |
| ``Customizing ezmlm-make operation''). | |
| 1133..66.. AAlllloowwiinngg rreemmoottee aaddmmiinniissttrraattoorrss ttoo rreettrriieevvee oorr sseeaarrcchh aa ssuubb-- | |
| ssccrriippttiioonn lloogg.. | |
| This is restricted and works as the subscriber list, since it contains | |
| information of equal sensitivity. To receive the entire log, mail | |
| list-log@listhost. See ``Howto get a subscription log'' for more | |
| details on the reply format. As of ezmlm-idx-0.32, the subscription | |
| log also contains the From: line contents from the user's subscribe | |
| confirmation. This usually contains the user's name and can be helpful | |
| if the user cannot recall or determine the subscription address. To | |
| make life easier for the remote admin, ezmlm-idx-0.32 also supports | |
| searching the log, using exact matches for alphanumerics and ``_'' as | |
| a wild card character. Thus, to find records matching ``Keith John*'', | |
| the remote admin can mail list-log.Keith_John. See ``Howto get a | |
| subscription log'' for more information. | |
| 1133..77.. AAlllloowwiinngg uusseerrss ttoo ggeett aa ssuubbssccrriibbeerr lliisstt.. | |
| If you want any user to be able to get a subscriber list, you can set | |
| up a separate link to DDIIRR//lliisstt and then put in a script using ezmlm- | |
| list (See ``adding your own commands'' for more info.) . The authors | |
| strongly urge against this, since a common method for spammers to get | |
| valid E-mail addresses from mailing lists is to exploit unrestricted | |
| -list commands. A subscriber with questions about who is on the list | |
| should contact the list-owner@host. A subscriber wishing to confirm | |
| that they are still on the list can just send a message to list- | |
| subscribe@listhost, and reply to the confirm request. The following | |
| message will be a ``ezmlm response'' if the user was already a | |
| subscriber, and a ``WELCOME to listname'' if s/he was not. | |
| 1133..88.. CChhaannggiinngg tthhee ttiimmeeoouutt ffoorr mmeessssaaggeess iinn tthhee mmooddeerraattiioonn qquueeuuee.. | |
| Put the time, in hours, into DDIIRR//mmooddttiimmee. This value may not exceed | |
| the range of 24-120 h set at compile time by the defines in iiddxx..hh. | |
| 1133..99.. FFiinnddiinngg oouutt hhooww mmaannyy mmeessssaaggeess aarree wwaaiittiinngg ffoorr mmooddeerraattiioonn.. | |
| % ls -l DIR/mod/pending | |
| and count lines with the owner execute bit set (rwx------). Others | |
| are remnants from failed ezmlm-store runs (ignore - ezmlm-clean(1) | |
| will remove them). | |
| There is currently no way to see this remotely, although you could | |
| easily install a script mailing the 'ls' output in response to a | |
| message to e.g. lliisstt--cchhkkqquueeuuee@@hhoosstt. (See ezmlm-check(1) and ``adding | |
| your own commands'' for examples.) | |
| 1133..1100.. UUssiinngg tthhee ssaammee mmooddeerraattoorrss ffoorr mmuullttiippllee lliissttss.. | |
| Set up a moderator dir: | |
| % mkdir /path/moddir /path/moddir/subscribers | |
| % touch /path/moddir/lock | |
| % chown -R user /path/moddir | |
| For alias: | |
| # chown -R alias /path/moddir | |
| For example: | |
| % mkdir ~joe/mods ~joe/mods/subscribers | |
| % touch ~joe/mods/lock | |
| Then for the lists, put //ppaatthh//mmooddddiirr into DDIIRR//mmooddssuubb (for moderation | |
| of subscribes), DDIIRR//rreemmoottee (for remote admin if DDIIRR//mmooddssuubb does not | |
| exist), and DDIIRR//mmooddppoosstt (for moderation of messages). | |
| For example: | |
| % echo "/home/joe/mods" > ~joe/DIR/modsub | |
| _N_O_T_E_: The path must start with a '/'. | |
| 1133..1111.. UUssiinngg ddiiffffeerreenntt mmooddeerraattoorrss ffoorr mmeessssaaggee aanndd ssuubbssccrriippttiioonn mmooddeerr-- | |
| aattiioonn.. | |
| Proceed as in the previous point, but set up two different moddirs. | |
| Naturally, one of these can be DDIIRR//mmoodd// (preferably the one for posts, | |
| to keep it cleaner). Then modify the appropriate files (DDIIRR//mmooddppoosstt | |
| and DDIIRR//mmooddssuubb) to contain absolute paths to the correct moddir. | |
| 1133..1122.. tthhee ````ssuuppeerr mmooddeerraattoorr'''' aabbllee ttoo aadddd//rreemmoovvee mmooddeerraattoorrss | |
| rreemmootteellyy.. SSeettttiinngg uupp mmooddeerraatteedd lliissttss wwiitthh tthhee lliisstt oowwnneerr aass | |
| This is done by crating a list that has DDIIRR//mmoodd// as it's main list | |
| directory, then adding the ``super moderator'' to DDIIRR//mmoodd//mmoodd// (see | |
| ``remotely adding moderators''). | |
| If this is a common setup for you, you can write a simple script | |
| creating both lists (plus a digest list, if desired) with one simple | |
| action (see ezmlm-both(1) for an example). | |
| 1133..1133.. CCuussttoommiizziinngg eezzmmllmm aaddmmiinniissttrraattiivvee mmeessssaaggeess.. | |
| Subject lines, and other ezmlm output for moderation are controlled by | |
| defines in iiddxx..hh and by files in DDIIRR//tteexxtt. To customize these, change | |
| iiddxx..hh and recompile or for DDIIRR//tteexxtt files, edit eezzmmllmmrrcc((55)) (see | |
| ``Customizing ezmlm-make operation''). | |
| You can also configure the list to allow remote administrators to edit | |
| files in DDIIRR//tteexxtt// via E-mail (see ``How text file editing works''). | |
| 1133..1144.. MMaannuuaallllyy aapppprroovviinngg aa mmeessssaaggee aawwaaiittiinngg mmooddeerraattiioonn.. | |
| All you have to do is to pipe the corresponding message to ``ezmlm- | |
| send DIR''. Messages awaiting moderation are kept in DDIIRR//mmoodd//ppeennddiinngg//. | |
| To find a particular file, grep the contents. Thus, to find a file | |
| from user@host.dom, try: | |
| % grep 'user@host\.dom' DIR/mod/pending/* | |
| (Depending on your setup, you may not have to escape the period.) | |
| Check the files for the owner execute (``x'') bit. It is set on all | |
| messages queued successfully. Ignore other files! | |
| To then accept the message (change the ezmlm-send(1) path if you've | |
| installed in a non-default directory): | |
| % cat DIR/mod/pending/filename \ | |
| % /usr/local/bin/ezmlm/ezmlm-send DIR | |
| Alternatively, use ezmlm-accept(1). It checks the 'x' bit, ezmlm- | |
| send(1) return codes, removes the file, etc. | |
| For example: | |
| % ezmlm-accept ~joe/SOS ~joe/SOS/pending/* | |
| will accept all messages in the queue of the list in ~~jjooee//SSOOSS//. | |
| 1133..1155.. MMaannuuaallllyy rreejjeeccttiinngg aa mmeessssaaggee aawwaaiittiinngg mmooddeerraattiioonn.. | |
| Simply deleting the file from DDIIRR//mmoodd//ppeennddiinngg// will do it. If you want | |
| to notify the sender, just send him/her an E-mail. There is an easy | |
| way to get ezmlm-idx programs to do it for you: just wait and let | |
| ezmlm-clean(1) take care of it for you, once the message has timed out | |
| (number of hours settable within 24-240 in DDIIRR//mmooddttiimmee; default 120). | |
| 1144.. SSuubblliissttss.. | |
| A sublist is a list that receives its input from another mailing list, | |
| rather than from users directly. The sublist is just a regular | |
| subscriber of the main list. A sublist in e.g. Tasmania is very useful | |
| since only one message is sent from the main list and then the | |
| sublists servers all subscribers in Tasmania. Bounces and all | |
| administration is handled locally. The local sublist can have a | |
| digest, even though the main list may not. (See ``How sublists work'' | |
| for more info on how sublists work). | |
| 1144..11.. SSuubblliissttss ooff eezzmmllmm lliissttss.. | |
| To set up a sublist to an ezmlm list, just use the ezmlm-make ``-0 | |
| mainlist@mainhost'' switch. This will configure your list as a sublist | |
| to the mainlist@mainhost mailing list. | |
| 1144..22.. SSuubblliissttss ooff nnoonn--eezzmmllmm lliissttss.. | |
| To set up a sublist to an ezmlm list, just use the ezmlm-make ``-0 | |
| mainlist@mainhost'' switch. This will configure your list as a sublist | |
| to the mainlist@mainhost mailing list. Since the main list may not use | |
| the ``Mailing-List'' header, you must identify another header that the | |
| main list adds to all messages. See the ezmlm-reject(1) man page for | |
| examples. Next, edit DDIIRR//eeddiittoorr of your sublist and add a ``-h | |
| _L_i_s_t_p_r_o_c_e_s_s_o_r_-_V_e_r_s_i_o_n_:'' option to the ezmlm-send(1) line, but | |
| replacing ``_L_i_s_t_p_r_o_c_e_s_s_o_r_-_V_e_r_s_i_o_n_:'' with your mainlist header. | |
| Now your list will accept only messages from mainlist@mainhost and | |
| with the header specified. | |
| 1144..33.. HHooww ttoo sseett uupp aa cclluusstteerr ooff lliisstt aanndd ssuubblliissttss wwiitthh ssttaannddaarrdd | |
| ddaattaabbaasseess.. | |
| ezmlm-0.53 allows sublists. The difference between a sublist and a | |
| main list is that the sublist requires that the SENDER of the message | |
| is the main list and that the message has a ``Mailing-List:'' header. | |
| Sublist messages have their own subscriber database and subscription | |
| mechanism, and use their own message number. This is very convenient | |
| if you want to create a private sublist. Since the subscribers have | |
| to interact with the appropriate sublist, it is difficult to | |
| administrate if you want to use it to distribute the load of a very | |
| large list, since users will have to address administrative requests | |
| such as unsubscribe to the correct sublist. Also, bounce messages | |
| refer to the sublist archive with sublist message numbers. | |
| ezmlm-idx modifies this in several ways: First, the message number of | |
| the incoming message is used also for the outgoing message so that | |
| subscribers see the same message number no matter which sublist they | |
| get it from. For security reasons, this is enabled only if the sublist | |
| is NOT ARCHIVED. With this feature, bounce messages can refer the user | |
| to the main list archive instead, obviating multiple archives. | |
| Second, ezmlm-split(1) can be used to forward administrative requests | |
| sent to the main list, to the appropriate sublist. Thus, subscribers | |
| interact only with the main list, and do not need to know which | |
| sublist that servers them. With bounce and administrative messages | |
| referring them to the main list, subscribers will usually be unaware | |
| of the sublisting. | |
| To set this up: | |
| +o | |
| ccrreeaattee tthhee mmaaiinn lliisstt | |
| ezmlm-make dir dot local host | |
| +o | |
| aadddd aann eezzmmllmm--sspplliitt((11)) iinnvvooccaattiioonn | |
| Before the ezmlm-manage(1) line in DDIIRR//mmaannaaggeerr add: | |
| |/path/ezmlm-split dir | |
| +o | |
| ddeecciiddee hhooww ttoo sspplliitt tthhee llooaadd | |
| The main list sends to sublists and to any addresses not covered | |
| by the split table. You can split the load by domain | |
| (``geographically''), and any domain (including '') can be | |
| subdivided by ``hash'' by using different parts of the 0-52 | |
| range. Of course, you can also use hash alone. The request will | |
| go to the first row that matches, so although overlaps are not | |
| advisable (in case you later want to add sublists of switch to | |
| an SQL server-based system (see ``'')), they have no negative | |
| effects. The domain for ezmlm-split can be the last TWO parts, | |
| i.e. ``edu.wustl'' to handle all *.wustl.edu subscribers. This | |
| is useful, but remember that the SQL version supports only one | |
| level. | |
| An example: | |
| domain:hash_lo:hash_hi:sublistname | |
| edu:0:52:sub1@here.edu | |
| com:0:26:sub2@there.net | |
| com:27:52:sub3@some.com | |
| :0:13:sub4@what.org | |
| :14:39:sub5@what.org | |
| As you can see, the entire ``edu'' domain is handled by | |
| sub1@here.edu. The ``com'' domain is about evenly split between | |
| sub2@there.net and sub3@some.com. Everything else is split so that | |
| approximately 1/4 goes to sub4@what.org, 1/2 to sub5@what.org and | |
| the rest falls through, i.e. is handled by the main list. | |
| Why are there 2 sublists on the same host? This is in preparation | |
| of adding a host. It easy to just move the entire sub5@what.org | |
| list to a new host. All we have to do it to set up the new list, | |
| copy over the subscribers, and change the name in the split table | |
| entry. | |
| To split the split the sub5@what.org load onto 2 lists requires a | |
| little more work. First, create a dummy split table in a directory | |
| ``temp'': | |
| :14:26:new1@new.net | |
| :27:39:new1@other.net | |
| Next, split the subscribers of sub5@what.org into these 2 groups, | |
| as detailed in the ezmlm-split(1) man page. Create the two new | |
| lists, add the respective subscribers, and replace the | |
| sub5@what.org line with the two lines above. | |
| To add a totally new domain, e.g. jp:0:52:sub6@niko.jp requires | |
| collection or subscribers from all lists that currently handle | |
| these subscribers, (the ones with blank domain in the example), re- | |
| splitting them, and adjusting the subscribers. Easiest here is to | |
| just unsubscribe the sub6@niko.jp subscribers to be from the other | |
| list with ezmlm-sub(1). Since that program will silently ignore | |
| any addresses that are not on the respective list, it will work | |
| fine. | |
| +o | |
| CCrreeaattee tthhee ssuubblliissttss | |
| Use ezmlmsubrc which sets up a minimal non-archived sublist with | |
| bounce texts pointing to the main list: | |
| % ezmlm-make -Cezmlmsubrc -3mainlocal -4mainhost \ | |
| DIR dot sub1local sub1host | |
| +o | |
| ssuubbssccrriibbee tthhee rreessppeeccttiivvee ssuubblliissttss ttoo tthhee mmaaiinn lliisstt | |
| If you forget, the sublist will not get any messages to | |
| distribute. Add these addresses with ezmlm-sub(1) as subscribers | |
| to the main list. | |
| A strong point of this system is that it is relatively simple and that | |
| only a fraction of the addresses are available to any given sublist. | |
| Thus, compromised security at a sublist threatens only the addresses | |
| and functions handled by that sublist. | |
| As you can see, this works quite well, but it's not trivial to change | |
| the setup. If you modify it while the list is running, some | |
| subscribers may get duplicate messages or miss messages. Therefore, | |
| you should disable deliveries to the main list before the final step | |
| of the changes (removal of subscribers from old lists and adding new | |
| lists as subscribers to the main list). For most lists, this should | |
| work flawlessly, and some minimal planning and extra lines in | |
| ``split'' can markedly facilitate future expansion. | |
| Another weak point is the authentication of messages between list and | |
| sublist. The requirements the sublist places on the message can be | |
| easily faked. This allows injection of messages at the sublist level | |
| as a way to circumvent moderation or other access control. | |
| An associated disadvantage is that not even the main list has access | |
| to all the addresses. Thus, SENDER checks for archive access | |
| (relatively secure) and posts (relatively insecure) cannot directly be | |
| used. Also, sublist cooperation is required to determine the number of | |
| subscribers, or to access subscriber addresses for a purpose other | |
| than distribution of list messages. | |
| 1155.. MMiiggrraattiioonn ttoo EEzzmmllmm ffrroomm ootthheerr MMaaiilliinngg LLiisstt MMaannaaggeerrss.. | |
| This section describes differences and similarities between ezmlm and | |
| other mailing list managers. It also details functions of ezmlm-idx | |
| that allow you to configure ezmlm to respond to commands utilized by | |
| such other mailing list managers so the command syntax will be | |
| familiar to such users. Contributions to complete this sections are | |
| welcome. | |
| 1155..11.. BBaassiicc CCoonncceeppttss.. | |
| Ezmlm is different from other mailing list managers in that it is | |
| _l_i_s_t_-_c_e_n_t_r_i_c rather than _h_o_s_t_-_c_e_n_t_r_i_c. With a _l_i_s_t_-_c_e_n_t_r_i_c interface, | |
| you address the list directly with administrative commands. With | |
| ezmlm, the command is embedded in the list address thus becoming part | |
| of it (i.e., the ``command address''.) With smartlist, again you | |
| address the list, but send all administrative commands to the list- | |
| request address. Ezmlm lists can support this if you use the ezmlm- | |
| make(1) ``-q'' switch to configure ezmlm-request(1) in DDIIRR//mmaannaaggeerr. | |
| Other mailing list managers are _h_o_s_t_-_c_e_n_t_r_i_c, i.e. administrative | |
| commands for any list on that particular host are addressed to a | |
| central address such as majordomo@host, listserv@host, or | |
| listproc@host. Then the user is required to place the command in | |
| either the subject header or more commonly in the body text of the | |
| message. The listname has to be included with the command. [_N_o_t_e_: The | |
| above concept is not universally applicable to all host-centric | |
| mailing lists. While intended to to used in a host-centric manner, | |
| many such mailing list managers also support listname-request@host | |
| addressing. See the applicable list manger documentation for details. | |
| Coverage of this aspect of other mailing list manager functionality is | |
| beyond the scope of this FAQ.] To make the migration to ezmlm easier, | |
| support for a _h_o_s_t_-_c_e_n_t_r_i_c style mailing list manger is available. | |
| This is based on the use of ezmlm-request(1) with the ``-f | |
| ccoonnffiigg__ffiillee'' switch. | |
| 1155..22.. SSeettttiinngg uupp eezzmmllmm ttoo rreessppoonndd ttoo hhoosstt--cceennttrriicc ccoommmmaannddss.. | |
| ezmlm-request(1) can be used a a ``majordomo/listserv-emulator''. You | |
| can create the necessary accessory files manually. However, ezmlm- | |
| idx>=0.32 contains ezmlmglrc(5) which makes is very easy for you: | |
| % su | |
| # su alias | |
| # ezmlm-make -C/usr/local/bin/ezmlmglrc dir dot local host | |
| where ``local'' may be e.g. ``majordomo''. Even easier is to set it up | |
| under a virtual domain ``host'' controlled by a user ``user''. Just | |
| put ``user'' in place of ``alias'' in the example. | |
| If you use a character set other than US-ASCII, put it's name, | |
| optionally followed by ``:'' and the desired content-transfer-encoding | |
| character (``Q'' for quoted-printable and ``B'' for base64) into | |
| eezzddoommoo//cchhaarrsseett. | |
| All that remains is to set up DDIIRR//eezzddoommoo..ccff with information on the | |
| lists (local and/or remote) that you want to make accessible via this | |
| interface. Another script, ezmlm-glconf(1) can help you with this for | |
| your local lists. To configure for all your lists: | |
| ezmlm-glmake ~/ > ~/dir/ezdomo.cf | |
| See man page for details. Alternatively, do it manually: | |
| The DDIIRR//eezzddoommoo..ccff contains a list of mailing lists which the | |
| ``majordomo'' (in this case) can provide information about in the | |
| following syntax: | |
| list@host:listdir:description | |
| To show a list in ``lists'', but not include it in a ``which'' search, | |
| simply omit the ``listdir'' for that line: | |
| list@host::description | |
| For the ``which'' command to work, the DDIIRR//, which contains the | |
| subscriber database, must be readable by the user under which mail is | |
| delivered. This means that ``which'' is usually limited to lists owned | |
| by the user or virtual domain under which the ``ezdomo'' interface is | |
| set up. | |
| 1155..33.. CCoommmmaannddss ooff ootthheerr mmaaiilliinngglliisstt mmaannaaggeerrss rreeccooggnniizzeedd bbyy eezzmmllmm.. | |
| 1155..33..11.. LLiissttpprroocc//LLiissttsseerrvv.. | |
| When set up as above, substituting ``listproc'' or ``listserv'' for | |
| ``majordomo'' as appropriate, ezmlm will recognize and respond to the | |
| following commands placed in the body of the e-mail with the syntax | |
| below. NNoottee:: eezzmmllmm wwiillll oonnllyy rreessppoonndd ttoo oonnee ccoommmmaanndd ppeerr mmeessssaaggee.. | |
| ssyynnttaaxx:: ccoommmmaanndd lliissttnnaammee [[ssuubbssccrriibbeerr@@hhoosstt]] | |
| SSuuppppoorrtteedd ccoommmmaannddss | |
| subscribe, sub, unsubscribe, unsub, list, help, review. | |
| AAddddiittiioonnaall ssuuppppoorrtteedd ccoommmmaannddss | |
| All ezmlm commands, such as ``thread'', ``index'' and ``get'' as | |
| well as the list owner's commands. | |
| This interfaced makes information available via command messages to | |
| the appropriate mailing list. Thus, ``list'' and ``review'' will send | |
| a subscriber list only to remote administrators and only if | |
| specifically allowed by the list owner. | |
| 1155..33..22.. MMaajjoorrddoommoo.. | |
| ssyynnttaaxx:: ccoommmmaanndd lliissttnnaammee [[ssuubbssccrriibbeerr@@hhoosstt]] | |
| SSuuppppoorrtteedd ccoommmmaannddss | |
| lists, subscribe, unsubscribe, help, which, who. | |
| AAddddiittiioonnaall ssuuppppoorrtteedd ccoommmmaannddss | |
| All ezmlm user and ezmlm owner commands. | |
| This interfaced makes information available via command messages to | |
| the appropriate mailing list. Thus, ``who'' will send a subscriber | |
| list only to remote administrators and only if specifically allowed by | |
| the list owner. | |
| 1155..33..33.. SSmmaarrttlliisstt.. | |
| Unlike ``listproc/listserv'' or ``majordomo'', ``smart-list'' does not | |
| provide ``host-centric'' services. Rather, commands are addressed to | |
| listname-request@host and the command placed on the ``Subject:'' line: | |
| To: listname-request@host | |
| Subject: command [subscriber@host] | |
| The body of the message is normally ignored. If the subject is empty, | |
| the first body line that starts with a letter is interpreted. | |
| SSuuppppoorrtteedd ccoommmmaannddss | |
| subscribe, unsubscribe. | |
| AAddddiittiioonnaall SSuuppppoorrtteedd CCoommmmaannddss | |
| All ezmlm user and ezmlm owner commands. | |
| 1166.. OOppttiimmiizziinngg lliisstt ppeerrffoorrmmaannccee.. | |
| Ezmlm-idx is designed to make it as easy as possible to set up mailing | |
| lists. The default setup works well for small and medium-sized lists. | |
| For large lists, the lists can be made more efficient with a few | |
| simple changes. | |
| 1166..11.. CCrroonndd--ggeenneerraatteedd ddiiggeessttss ffoorr bbeetttteerr ppeerrffoorrmmaannccee.. | |
| With the default setup, ezmlm-tstdig(1) in DDIIRR//eeddiittoorr tests if a | |
| digest should be sent out. On lists with a lot of traffic this is | |
| inefficient. Also, you may want digests to be delivered as a specific | |
| time. To do this, use crond(8) to execute ezmlm-get(1) directly, as | |
| described elsewhere. | |
| 1166..22.. OOppttiimmiizziinngg eexxeeccuuttiioonn ooff eezzmmllmm--wwaarrnn((11)).. | |
| ezmlm-idx>=0.32 comes with much improved bounce handling. Modification | |
| as described below should be considered only when you expect thousands | |
| of bouncing addresses (virtually never). The description remains, for | |
| users of ezmlm-0.53 or earlier versions of ezmlm-idx. For users of | |
| ezmlm-0.53 alone, we recommend a patch | |
| (http://ezmlm.org/archive/patches/ezmlm-return.diff) which fixes a | |
| bug in ezmlm-0.53 bounce handling. The patch is superseded by ezmlm- | |
| idx. | |
| To redistribute the load of bounce warning and probe addresses to off- | |
| peak hours, you may want to set up the list without ezmlm-warn(1) by | |
| using the ezmlm-make ``-w'' switch, and instead execute ``ezmlm-warn | |
| DIR'' via crond(8). You also need to run ``ezmlm-warn -d DIR'' for | |
| digest bounces if your list is configured with digests. Normal ezmlm | |
| list with ezmlm-idx>=0.32 will have an insignificant bounce load, | |
| except if you bulk add addresses, e.g. from a MLM without bounce | |
| handling. In the latter case, the load will be higher for the first | |
| 2-4 weeks, then decrease drastically. If you feel you need to run | |
| ezmlm-warn(1) from crond(8), you should seriously consider sublisting | |
| your lists. | |
| _N_o_t_e_: the ezmlm-make(1) ``-w'' switch has a special meaning if used at | |
| the same time as enabling SQL-support (``-6''; see man pages). | |
| 1166..33.. DDeeccrreeaassiinngg eezzmmllmm--wwaarrnn ttiimmee oouutt ttoo iinnccrreeaassee ppeerrffoorrmmaannccee.. | |
| With ezmlm-idx, you may alter the ezmlm-warn(1) timeout to a number of | |
| seconds with the ``-t seconds'' switch. The default is 1,000,000 | |
| seconds or about 11.6 days. This is the time from the first bounce | |
| until ezmlm-warn(1) sends a warning message and the time from the | |
| warning message bounce until ezmlm-warn(1) sends a probe (which if | |
| bounced leads to removal of the address from the subscriber list). If | |
| you have a digest list, remember to execute ezmlm-warn(1) with the | |
| ``-d'' switch as well. | |
| Decreasing the default to e.g. 5 days will cut in half the average | |
| number of files in the bounce directory and the number of messages | |
| sent at each crond(8)-directed invocation of ezmlm-warn(1). The trade- | |
| off is that worst case, a subscriber may be unsubscribed if his/her | |
| mail path is defective for more than twice the timeout. Removing a | |
| subscriber after 10 days seems reasonable on a busy list. Do this by | |
| adding the ``-t'' switch to all the ezmlm-warn(1) invocations. This | |
| timeout should be larger than the interval between ezmlm-warn(1) | |
| invocation. | |
| To be aggressive, use ``ezmlm-warn -t0''. This will minimize the time | |
| your lists spends servicing bounces, but will for some errors lead to | |
| subscribers to be also lead to subscribers being removed if messages | |
| to them bounce for two consecutive ezmlm-warn(1) runs. This is useful | |
| to rapidly clean up a low quality address collection. | |
| 1166..44.. UUssee eezzmmllmm wwiitthhoouutt eezzmmllmm--iiddxx ffoorr mmaaxxiimmuumm ppeerrffoorrmmaannccee.. | |
| ezmlm-idx adds a number of functions to ezmlm. It indexes the archive, | |
| and adds an index entry for each message, it can remove MIME parts, it | |
| can add a subject prefix and message trailer, decode rfc2047-encoded | |
| subjects, etc. Although designed to impact minimally on performance, | |
| these options when used take time. Even when they are not used, time | |
| is spent looking for e.g. the prefix. However, the performance penalty | |
| is small, as the absolutely dominating cost of a mailing list is the | |
| work qmail does to deliver the messages to subscribers. | |
| In bench marking, we have not found a significant difference in | |
| performance between ezmlm-0.53 and ezmlm-0.53+ezmlm-idx-0.32 when | |
| ezmlm-idx features are not used. Thus, a non-indexed list with ezmlm- | |
| idx-0.32 performs the same as the corresponding ezmlm-0.53 list. | |
| Adding an index adds the overhead of another safe write (the index | |
| file). Use of other features adds very marginally to execution time. | |
| For virtually all lists, the ezmlm execution time is negligible | |
| compared to the resources needed by qmail to disseminate the message | |
| to the subscribers. | |
| 1166..55.. NNoott aarrcchhiivviinngg ttoo mmaaxxiimmiizzee ppeerrffoorrmmaannccee.. | |
| An archived list needs to write the message to the archive. If you | |
| don't need an archive, don't archive. However, the archive is very | |
| useful to allow users to catch up on messages that they didn't receive | |
| due to delivery problems. | |
| 1166..66.. SSuubblliissttss ttoo mmaaxxiimmiizzee ppeerrffoorrmmaannccee.. | |
| Consider splitting your list into sublists, ideally geographically. | |
| The main list deals only with a subset of subscribers (or only the | |
| sublists), and each sublist deals with a subset of subscribers, | |
| bounces, etc. This is the most rational way to scale ezmlm to large | |
| lists (see ``How sublists work'' for more info on how sublists work | |
| and ``Sublists'' on how to set up sublists). | |
| 1177.. MMiisscceellllaanneeoouuss.. | |
| 1177..11.. HHooww ddoo II qquuiicckkllyy cchhaannggee tthhee pprrooppeerrttiieess ooff mmyy lliisstt?? | |
| ezmlm-make -+ [changed_switches] dir | |
| ezmlm-make(1) stores configuration info in DDIIRR//ccoonnffiigg and uses that | |
| info as the default when you use the ``-+'' switch. If the list was | |
| created with a very old version or ezmlm-0.53 ezmlm-make(1) you have | |
| to restate all arguments the first time you edit the list. | |
| The ``-e'' switch works the same, without stickiness for switches. | |
| A message arriving during reconfiguration may be handled incorrectly. | |
| The prudent user will set the sticky bit on the home directory to | |
| prevent delivery, then clear it after the list has been changed. | |
| 1177..22.. OOppeenn aarrcchhiivveedd lliisstt wwiitthh ddaaiillyy ddiiggeessttss.. | |
| This is the default setup. The main list generates digests in response | |
| to a mailed request or when a message arrives and the amount of | |
| messages since the last digest exceeds set limits (see ezmlm- | |
| tstdig(1)). Alternatively, ezmlm-get(1) can be invoked from the | |
| command line. In both cases, the generated digest message is | |
| disseminated to the subscribers stored in DDIIRR//ddiiggeesstt//ssuubbssccrriibbeerrss//, | |
| i.e. the subscriber database with the base directory DDIIRR//ddiiggeesstt//. | |
| +o See ``setting up a digest list'' on how to set up the lists. | |
| 1177..33.. VVaarriiaattiioonnss iinn mmooddeerraattiioonn | |
| You can set up lists with combinations of message moderation, | |
| subscription moderation, and remote administration, easiest by | |
| combining ezmlm-make(1) ``-m'' ,``-s'', and ``-r'' switches. You can | |
| use a non-default moderator db, by specifying a directory starting | |
| with a slash in DDIIRR//mmooddssuubb or DDIIRR//rreemmoottee (for remote admin and | |
| subscription moderation - always the same db for both functions) or in | |
| DDIIRR//mmooddppoosstt for message moderation. You can point several lists to the | |
| same moderator db, thus using the same moderators for several lists. | |
| _N_O_T_E_: The user controlling the list must have read/write access to the | |
| files (specifically, must be able to write the lock file). | |
| Some of these setups are not trivial. However, you can make them | |
| trivial by modifying ezmlmrc(5) so that ezmlm-make(1) can set up the | |
| desired lists by default or when the user uses e.g. the ``-y'' or | |
| ``-z'' switches (see ``Customizing ezmlm-make operation''). | |
| 1177..44.. LLiissttss tthhaatt aallllooww rreemmoottee aaddmmiinn,, bbuutt nnoott uusseerr iinniittiiaatteedd ssuubbssccrriipp-- | |
| ttiioonn oorr aarrcchhiivvee rreettrriieevvaall.. | |
| Create a regular remote admin list, but remove DDIIRR//ppuubblliicc. This | |
| allows moderators to (un)subscribe users and have archive access, but | |
| rejects all user requests. Posts work as usual. Naturally, this can | |
| be combined with message moderation or ezmlm-issub SENDER checks (see | |
| ``Restricting message posting to the list''). | |
| 1177..55.. LLiissttss tthhaatt aallllooww rreemmoottee aaddmmiinn,, uusseerr aarrcchhiivvee rreettrriieevvaall,, bbuutt nnoott | |
| uusseerr--iinniittiiaatteedd ssuubbssccrriippttiioonn.. | |
| Create a regular remote admin list, remove DDIIRR//ppuubblliicc, and add the | |
| ``-p'' [public] switch to the ezmlm-get(1) command line in | |
| DDIIRR//mmaannaaggeerr. This overrides the normal DDIIRR//ppuubblliicc effect on ezmlm- | |
| get(1) and archive retrieval, allowing full archive access to anyone, | |
| but rejecting user -help and subscription commands. It is assumed | |
| that the users know archive retrieval commands without help. If you | |
| want to provide specific help, just link ~~//..qqmmaaiill--lliissttnnaammee--hheellpp to | |
| DDIIRR//hheellpp, and invoke a script that copies help info from there. See | |
| ezmlm-check(1) for an example. | |
| 1177..66.. LLiissttss tthhaatt rreessttrriicctt aarrcchhiivvee rreettrriieevvaall ttoo ssuubbssccrriibbeerrss.. | |
| Use a standard list, but add the ezmlm-get(1) ``-s'' command line | |
| switch in DDIIRR//mmaannaaggeerr. Only subscribers can receive archive excerpts. | |
| Digests work as usual. This can be set up using the ezmlm-make(1) | |
| ``-g'' switch. | |
| 1177..77.. LLiissttss tthhaatt ddoo nnoott aallllooww aarrcchhiivvee rreettrriieevvaall aatt aallll.. | |
| Use a standard list, but add the ``-C'' switch to both the ezmlm- | |
| get(1) and ezmlm-manage(1) command lines in DDIIRR//mmaannaaggeerr. No archive | |
| retrieval commands will be honored. Digest can be created as usual | |
| (See ``Restricting archive retrieval''). | |
| 1177..88.. LLiissttss tthhaatt ddoo nnoott aallllooww aarrcchhiivvee rreettrriieevvaall aanndd ddoo nnoott aallllooww | |
| ddiiggeesstt ttrriiggggeerriinngg ppeerr mmaaiill.. | |
| For maximal archive security, set up a normal indexed and archived | |
| list, then remove the ezmlm-get(1) line from DDIIRR//mmaannaaggeerr and add the | |
| ``-C'' switch to the ezmlm-manage(1) command line. You can still | |
| create digests by direct invocation of ezmlm-get(1) from a script or | |
| crontab entry. | |
| 1177..99.. LLiissttss tthhaatt aallllooww aarrcchhiivvee rreettrriieevvaall oonnllyy ttoo mmooddeerraattoorrss,, bbuutt | |
| aallllooww uusseerr--iinniittiiaatteedd ssuubbssccrriippttiioonn.. | |
| Create a normal remote admin (+ subscription moderated) list, and add | |
| the ``-P'' (not public) switch to the ezmlm-get(1) command line in | |
| DDIIRR//mmaannaaggeerr. Subscription will not be affected, but ezmlm-get(1) will | |
| send archive excerpts only to moderators. Digests are unaffected. | |
| 1177..1100.. LLiissttss tthhaatt ddoo nnoott rreeqquuiirree uusseerr ccoonnffiirrmmaattiioonn ffoorr ((uunn))ssuubbssccrriipp-- | |
| ttiioonn.. | |
| The need for a user handshake can be eliminated by the ezmlm-manage(1) | |
| ``-S'' (subscribe) and/or ``-U'' (unsubscribe) switches. Alone, this | |
| is very insecure. However, there may be some use for it in local lists | |
| with subscription moderation, or alone for notifications where ease of | |
| use is more important than preventing users from (un)subscribing | |
| others. If the list has subscription moderation or remote | |
| administration, any user subscribe or unsubscribe request is forwarded | |
| to the moderators if the SENDER and target address do not match, even | |
| if the ``-U/-S'' switches are specified. This is put in place to make | |
| a ``-U/-S'' list similar to other list managers, not for security | |
| (it's not secure, since a malicious outsider can easily fake the | |
| SENDER address). Unsubscribe confirmations are sent also to the target | |
| in this case, to avoid situations where the user needs moderator | |
| ``permission'' to get off the list. | |
| 1177..1111.. AAnnnnoouunncceemmeenntt lliissttss ffoorr aa ssmmaallll sseett ooff ttrruusstteedd ppoosstteerrss | |
| Set up the list with ezmlm-make ``-om'' and add the ``trusted E-mail | |
| addresses'' to DDIIRR//mmoodd// with | |
| % ezmlm-sub DIR mod address@host | |
| A post from a ``trusted address'' is sent back to that address for | |
| approval, assuring that the user at that address really sent the post. | |
| Posts from other e-mail addresses are rejected. | |
| 1177..1122.. AAnnnnoouunncceemmeenntt lliissttss aalllloowwiinngg mmooddeerraatteedd ppoossttss ffrroomm aannyyoonnee.. | |
| This is useful in many circumstances. A list announcing new programs | |
| for a system, where both the main developers and other users may have | |
| contributed programs. | |
| Set up the list with ezmlm-make ``-m'' and the main developers as | |
| moderators. When any of these posts, that user alone is asked to | |
| confirm. Posts from other E-mail addresses are sent to all | |
| moderators/developers. To use a different set of E-mail addresses as | |
| ``trusted e-mail addresses'' and moderators for other posts, use the | |
| ezmlm-store(1) ``-S'' switch and make a separate address database for | |
| the ``trusted E-mail addresses''. Put the name of the basedir for the | |
| ``trusted e-mail addresses'' database in DDIIRR//mmooddppoosstt (needs leading | |
| ``/''), and add the post moderator(s) to DDIIRR//mmoodd// using ezmlm-sub(1) | |
| as shown above. | |
| 1177..1133.. AAnnnnoouunncceemmeenntt lliissttss wwiitthh lleessss sseeccuurriittyy aanndd mmoorree ccoonnvveenniieennccee.. | |
| A general solution for SENDER checking is to configure list with | |
| ezmlm-gate(1). ezmlm-gate(1) takes as arguments any number of | |
| basedirs for subscriber lists. Posts from SENDERs that are found are | |
| posted. For others ezmlm-store(1) is invoked. If DDIIRR//mmooddppoosstt exists, | |
| ezmlm-store(1) will send out other messages for moderation. To bounce | |
| such messages, create DDIIRR//mmooddppoosstt, and use the ezmlm-gate(1) ``-P'' | |
| switch (will be passed on to ezmlm-store(1) to bounce any posts not | |
| from a moderator). | |
| By default, ezmlm-gate(1) accepts messages from subscribers. However, | |
| this is overridden if any ``basedirs'' are put on the ezmlm-gate(1) | |
| command line. Common would be to create a address list and put its | |
| ``basedir'' on the ezmlm-gate(1) command line. Trusted E-mail | |
| addresses can then be added with: | |
| % ezmlm-sub basedir trusted@host | |
| As this relies on SENDER checks it is less secure than the ezmlm-store | |
| based confirmation-requiring setup. | |
| 1188.. EEzzmmllmm--iiddxx ccoommppiillee ttiimmee ooppttiioonnss.. | |
| 1188..11.. LLooccaattiioonn ooff bbiinnaarriieess.. | |
| This is configured via ccoonnff--bbiinn as for other ezmlm programs. The | |
| default is //uussrr//llooccaall//bbiinn//eezzmmllmm. | |
| 1188..22.. LLooccaattiioonn ooff mmaann ppaaggeess.. | |
| This is configured via ccoonnff--mmaann as for other ezmlm programs. The | |
| default is //uussrr//llooccaall//mmaann. | |
| 1188..33.. BBaassee ddiirreeccttoorryy ooff qqmmaaiill--iinnssttaallllaattiioonn.. | |
| This is configured via ccoonnff--qqmmaaiill as for other ezmlm programs. The | |
| default is //vvaarr//qqmmaaiill. | |
| 1188..44.. SShhoorrtt hheeaaddeerr tteexxttss,, eettcc.. | |
| Ezmlm-idx text (short lines, such as ``Administrivia'' for digests), | |
| command names, etc, are defined in iiddxx..hh, used at compile time. You | |
| can change them by changing the defines in this file. | |
| 1188..55.. AArrbbiittrraarryy lliimmiittss.. | |
| iiddxx..hh contains defines for some ezmlm-idx arbitrary limits, such as | |
| the maximum number of messages per ``-get'' request. They can be | |
| changed here. | |
| 1188..66.. CCoommmmaanndd nnaammeess.. | |
| There is support for one alias per user command for | |
| internationalization. (See ``Multiple language support''.) | |
| 1188..77.. EErrrroorr mmeessssaaggeess.. | |
| All ezmlm-idx error messages are defines in eerrrrttxxtt..hh, used at compile | |
| time. These can be changed for special situations, but we would advise | |
| against doing so. If you do for some reason produce such a translated | |
| file, we would appreciate if you sent a copy to the authors. NOTE: | |
| These do not affect error messages from programs that are not part of | |
| the ezmlm-idx package, nor of some subroutines used by ezmlm-idx | |
| programs (getconf_line.c comes to mind). | |
| Hopefully, the error messages for all parts will be synchronized in | |
| later versions of ezmlm, and possibly handled from a run-time | |
| changeable separate file (maybe as a .cdb database). | |
| 1188..88.. PPaatthhss aanndd ootthheerr oodddd ccoonnffiigguurraattiioonn iitteemmss.. | |
| idx.h also has defines for //eettcc//eezzmmllmmrrcc, default formats for | |
| moderation enclosures, default character set, default digest format, | |
| etc. Since most of these items are easily changed at run time, there | |
| is usually no need to change the compiled-in defaults. If you do need | |
| to, this is where they are. | |
| 1199.. MMuullttiippllee llaanngguuaaggee ssuuppppoorrtt.. | |
| 1199..11.. CCoommmmaanndd nnaammeess.. | |
| ezmlm commands can have aliases for use in translations for non- | |
| English use. Due to the use of commands in mail e-mail addresses, the | |
| character set is limited by rfc822 to us-ascii. To enable the command | |
| aliases, remove the comment marks around the INTL_CMDS define in | |
| idx.h. Also, remove the comments from the define corresponding to one | |
| language (currently, only LANG_FR - French) available. | |
| The INTL_CMDS define results in the compilation of all ezmlm programs | |
| with support for alias commands for those commands listed in the INTL | |
| section (all that are used directly by users). All aliases MUST be | |
| defined, but should be the normal English commands. The language- | |
| specific sections un-define and redefine the commands for which | |
| alternative names should be used. This allows use of e.g. | |
| ``inscription'' as an alias in addition to the standard ``subscribe''. | |
| 1199..22.. TTeexxtt ffiilleess.. | |
| Most ezmlm responses are made from text files in DDIIRR//tteexxtt//. These are | |
| created from the template file ``ezmlmrc''. Thanks to Frank Denis, and | |
| Masashi Fujita, Wanderlei Antonio Cavassin, Sergiusz Pawlowicz, Frank | |
| Tegtmeyer, Torben Fjerdingstad, Jan Kasprzak, and Sebastian Andersson, | |
| French, Japanese, Portuguese (var. Brazil), Polish, German, Danish, | |
| Czech, and Swedish versions are available. Just: | |
| % make jp | |
| before | |
| # make install | |
| or just copy eezzmmllmmrrcc..jjpp to //eettcc//eezzmmllmmrrcc, where it will override the | |
| copy installed in the ezmlm binary directory. For rpm packages, the | |
| en_US version is installed, but the other versions are available in | |
| the //uussrr//ddoocc// hierarchy. | |
| If you have made an eezzmmllmmrrcc((55)) version for another language, please | |
| make it public domain and E-mail it as an attachment to | |
| bruce@untroubled.org. It will then be put into the eezzmmllmmrrcc directory | |
| of the distribution site. Please take advantage of the ``Content- | |
| transfer-encoding'' capability of ezmlm-idx>=0.30, if needed, as this | |
| avoids problems when messages are sent via non-8-bit MUAs. | |
| Other ezmlm responses, such as words in subject lines, are defines in | |
| iiddxx..hh and can be changed there. Error messages should ideally not be | |
| altered. However, it may make sense to change a few of them which are | |
| used as messages to e.g. remote administrators. The defines for all | |
| error messages are in eerrrrttxxtt..hh. | |
| 1199..33.. MMuullttii--bbyyttee cchhaarraacctteerr ccooddee ssuuppppoorrtt.. | |
| ezmlm, as far as we know, places no restrictions on character sets. | |
| The configurable default character set allows you to use other | |
| character sets for out going ezmlm messages. ezmlm-make does not _p_e_r | |
| _s_e support other character sets. However, any single-byte character | |
| set is supported, as long as the us-ascii character sequence ``</'' | |
| does not occur anywhere as the first characters of the line, and the | |
| character sequence ``<#x#>'' (where ``x'' is any number, or A, B, C, | |
| D, F, H, L, R, T) does not occur anywhere is text (if it does, it | |
| risks being substituted). Also, any occurrence or ``<#A#>'' and | |
| ``<#R#>'' that is the first on any text line will be substituted by | |
| ezmlm-manage and ezmlm-store. Any occurrence of ``!A'' and ``!R'' as | |
| the first characters on a line will be substituted by ezmlm-manage and | |
| ezmlm-store. | |
| For multi-byte character codes, the same restrictions apply. Thus, | |
| ``</'' at the start of a line will confuse ezmlm-make, and any | |
| ``<#x#>'' sequence within the text risks substitution. In practice, | |
| both of these should be very rare and easily avoidable when setting up | |
| an ezmlmrc(5). | |
| 2200.. SSuubbssccrriibbeerr nnoottiiffiiccaattiioonn ooff mmooddeerraattiioonn eevveennttss.. | |
| 2200..11.. GGeenneerraall ooppiinniioonnss.. | |
| This is a collection of the authors opinions and an explanation of | |
| ezmlm-idx moderation design, which you may or may not agree with. | |
| 2200..22.. UUsseerrss sshhoouulldd kknnooww tthhaatt tthhee lliisstt iiss ssuubbssccrriippttiioonn mmooddeerraatteedd.. | |
| List subscribers should be informed that subscriptions to the list are | |
| controlled by a moderator. ezmlm-idx in its default setup handles | |
| this notification during and after the subscribe handshake. Most of | |
| this can be disabled by manipulation of the DDIIRR//tteexxtt// files. | |
| 2200..33.. SSuubbssccrriibbeerrss sshhoouulldd kknnooww tthhaatt ppoossttss aarree mmooddeerraatteedd.. | |
| List subscribers should be informed that posts to the list are | |
| moderated. ezmlm-idx does this by adding the ``Delivered-To: moderator | |
| for ...'' header, but IOHO, the list owner should make the fact of | |
| list moderation plain in introductory messages, or other means, to the | |
| list subscribers. | |
| 2200..44.. SSeennddeerrss ooff ppoossttss sshhoouulldd bbee nnoottiiffiieedd ooff rreejjeeccttiioonnss.. | |
| With normal use of ezmlm-idx, the sender of a rejected post is | |
| notified that the post has been rejected and if the moderators chooses | |
| to comment, the sender receives this comment, usually describing why | |
| the post was rejected. This ezmlm behavior cannot be disabled at run | |
| time. | |
| If post are neither accepted or rejected, they time out. ezmlm- | |
| clean(1) notifies the sender when this happens. This behavior can be | |
| disabled with the ezmlm-clean(1) ``-R'' (not return) switch, which has | |
| to be placed on the command line of all invocations of ezmlm-clean(1) | |
| (normally in DDIIRR//eeddiittoorr and DDIIRR//mmooddeerraattoorr). If you for some reason do | |
| not wish to inform the sender of your editorial decision, you can use | |
| this switch and let undesirable posts time out, rather than actively | |
| rejecting them. IOHO, it is better to be "above board" and use the | |
| normal notification mechanisms, together with active rejection and | |
| informative rejection comments. | |
| The ezmlm-make(1) ``-u'' switch uses moderation in a slightly | |
| different way. Here, posts are restricted to subscribers, but posts | |
| from non-subscribers are sent to the moderator(s) rather that being | |
| ignored. This to help the subscriber that posts from an alias of the | |
| subscribed address, or the occasional non-subscriber. In this case it | |
| is perfectly acceptable to just ignore non-accepted posts. Thus, using | |
| the ezmlm-make(1) ``-u'' switch configures the ezmlm-clean(1) | |
| invocations with the ``-R'' switch. | |
| 2211.. EEzzmmllmm--iiddxx sseeccuurriittyy.. | |
| 2211..11.. GGeenneerraall aassssuummppttiioonnss.. | |
| This document discusses security aspects of ezmlm-idx addition to the | |
| ezmlm-0.53 mailing list manager. This is the authors' understanding of | |
| security aspects of ezmlm-idx functions and not to be taken as a | |
| warranty. If you find any errors in this document or the ezmlm-idx | |
| package in general, please inform the authors. | |
| In general, ezmlm with or without the ezmlm-idx package is more secure | |
| and less resource hungry than most other mailing list managers. Better | |
| security than afforded by ezmlm +/- ezmlm-idx would require encryption | |
| or PGP/digital signatures. Such an addition would make it difficult, | |
| if not impossible, to run the mailing list from a standard MUA. The | |
| ezmlm-idx package adds a number of functions and options, which under | |
| some conditions may decrease security. The purpose of this document is | |
| to discuss security aspects of using/enabling these different | |
| functions. | |
| 2211..22.. SSEENNDDEERR mmaanniippuullaattiioonn.. | |
| We assume that the cost of manipulating/falsifying the SENDER address | |
| of a message is zero. Thus, any mechanism relying on SENDER alone is | |
| insecure. However, such a mechanism may help in case of simple mailer | |
| or user errors. We also assume that the "cookies" used by ezmlm are | |
| secure, i.e. that it is very hard for someone to generate a valid | |
| cookie for a given address. SENDER is used to identify a moderator for | |
| remote administration of subscriptions. The result of the action or | |
| the confirmation request are sent back to that moderator address. | |
| Thus, providing a false SENDER is useless, unless the attacker can | |
| also read that moderator's mail. | |
| 2211..33.. eezzmmllmm ccooookkiieess.. | |
| Since ezmlm doesn't rely on the SENDER, the security lies entirely | |
| within the action-time-cookie-address combination. Anyone obtaining a | |
| valid "combination" can do whatever the combination is meant to do, | |
| but nothing else. Also, the cookie times out 1000000 seconds | |
| (approximately 11.6 days) after it was issued. Since the | |
| "combinations" are specific for a particular action and address, they | |
| can only be reused for that particular purpose, and within 11.6 days. | |
| Ezmlm (un)subscriptions for a given address are usually pointless to | |
| repeat. Message moderation "combinations" are useless after they've | |
| been used, since the message is no longer in the moderation queue. | |
| 2211..44.. LLiissttss wwiitthhoouutt rreemmoottee aaddmmiinn//ssuubbssccrriippttiioonn mmooddeerraattiioonn.. | |
| Maliciously (un)subscribing an address with ezmlm-0.53 requires that | |
| the attacker is able to read mail sent to the subscription address. | |
| With the ezmlm-idx add-on, a non-moderated list works exactly the same | |
| way. Ezmlm-idx introduces the moderator for moderated and remote admin | |
| lists. For any moderator functions, an attacker needs to be able to | |
| read mail sent to a moderator's address. If s/he can do this, the | |
| attacker can affect anything the moderator is allowed to do (since | |
| falsifying SENDER is trivial). To minimize risks, give moderators only | |
| the power they need, do not use more moderators than necessary, and | |
| use moderators whose mail is hard to intercept (on the same | |
| machine/same internal/secure network or by encryption via e.g. ssh). | |
| 2211..55.. MMeessssaaggee mmooddeerraattiioonn.. | |
| A basic message moderated list keeps ezmlm subscriber security, but | |
| interpolates the moderator(s) between the address of the list and the | |
| list itself. An attacker able to read moderator mail can accept/reject | |
| a post, if s/he can do it before a regular moderator has taken action. | |
| The potential for abuse can be minimized by using few and local | |
| moderators. Mail logs are needed to trace which moderator address was | |
| misused. | |
| 2211..66.. SSuubbssccrriippttiioonn mmooddeerraattiioonn.. | |
| A basic subscription moderated list retains ezmlm subscriber security, | |
| but adds a moderator handshake. An attacker would need to be able to | |
| both read mail to the subscriber address and to at least one | |
| moderator. | |
| 2211..77.. RReemmoottee aaddmmiinniissttrraattiioonn.. | |
| A remote admin (-r) list adds the ability of the moderator to | |
| (un)subscribe any address. The price of this is that an attacker able | |
| to read moderator mail can (un)subscribe any address. The moderator | |
| handshake message will be delivered to the abused moderator address, | |
| which will alert that moderator and reveal the compromise. Another | |
| basic assumption is that action-date-cookie-address combinations are | |
| only sent to the target address or a moderator and that moderator | |
| action "combinations" are never sent to non-moderators. | |
| 2211..88.. RReemmoottee eeddiittiinngg ooff eezzmmllmm tteexxtt ffiilleess.. | |
| ezmlm-manage(1) can allow remote administrators to edit files in | |
| DDIIRR//tteexxtt. First, this option is disabled by default. Second, the | |
| ``-edit'' command is accepted only when the target (the recipient) is | |
| a remote administrator. Third, only existing files within DDIIRR//tteexxtt | |
| are editable. It is not possible to create files. | |
| ezmlm replies to a valid request with an informative message and the | |
| contents of the file. In addition, the ``Reply-To:'' address contains | |
| a cookie based on the file name and contents, as well as the current | |
| time. Anyone possessing this cookie can save a new version of the | |
| text file. As with other ezmlm security, the security of this process | |
| depends on only the remote administrator receiving remote | |
| administrator mail. If this is not sufficiently secure for you, do not | |
| enable this option. As always, an increase in accessibility results | |
| results in a decrease in security. | |
| Cookies for editing expire in approximately 27 hours. Also, as soon as | |
| a file is changed, the cookie is invalidated since the file contents | |
| change. This also means that an outstanding edit request cannot be | |
| completed if the files has been updated in the interim. | |
| A potential attacker obtaining a valid cookie has a window of | |
| opportunity while you edit the file, or for at most 27 hours. S/he can | |
| overwrite and existing text file with potentially offensive material. | |
| Usually, this can be achieved more easily by posting to the list. S/he | |
| can also potentially fill your disk with a large amount of data (up to | |
| two times 10240 bytes (limited by MAXEDIT in iiddxx..hh)) and could put | |
| part of this data onto messages leaving the list. Again, this is much | |
| more easily achieved by e.g. sending the equivalently sized message to | |
| your list. | |
| 2211..99.. DDiiggeesstt ggeenneerraattiioonn aanndd aarrcchhiivvee rreettrriieevvaall.. | |
| The archive retrieval functions added by ezmlm-idx are digests | |
| (protected by a "code") and other functions. Anyone who knows the | |
| digest code (through reading mail logs, reading DDIIRR//mmaannaaggeerr of the | |
| list, or reading any scripts used to send digest triggering messages) | |
| can trigger a digest. Protect these locations accordingly! For | |
| default lists with digests triggered from DDIIRR//eeddiittoorr via ezmlm- | |
| tstdig(1) and ezmlm-get(1), you do not need the digest code and can | |
| thus disable the possibility to trigger digest by mail. For other | |
| functions, the output is sent to SENDER and can be restricted to | |
| subscribers (the ``-s'' switch). ezmlm-get(1) functions (apart from | |
| digest) can be entirely disabled with the i``-C'' switch, or | |
| restricted to moderators with the ``-P'' switch or by removing | |
| DDIIRR//ppuubblliicc. Other sections of this document discuss several other | |
| options. All switches are documented in the man pages. | |
| The moderator support functions added by the ezmlm-idx package | |
| (extended help and subscriber list) are sent only to a moderator | |
| address, i.e. an attacker again needs to be able to read moderator | |
| mail to read the output. The help info (DDIIRR//tteexxtt//mmoodd--hheellpp) should not | |
| contain secrets. The ``-list'' function is normally disabled, but can | |
| be enabled with the ezmlm-manage -l switch to aid the remote | |
| administrator(s). | |
| 2211..1100.. CCoonnvveenniieennccee ffoorr sseeccuurriittyy:: tthhee eezzmmllmm--mmaannaaggee ````--SS'''' aanndd ````--UU'''' | |
| sswwiittcchheess.. | |
| ezmlm-manage(1) functions can be made more convenient, at the expense | |
| of security. There have been many requests for these options, so they | |
| have been added, although we recommend against using them: | |
| The ezmlm-manage(1) ``-S'' switch eliminates the subscriber handshake | |
| from subscribe requests. Thus, it is no longer necessary for the | |
| subscriber to confirm the subscription. This is not secure, but may be | |
| convenient for some moderated lists. Use only with extreme caution. | |
| The ezmlm-manage(1) ``-U'' switch similarly eliminates subscriber | |
| confirmation from unsubscribe requests. Again, this is insecure and | |
| useful only under special circumstances. If the list has any | |
| moderators (remote or modsub), requests to (un)subscribe an address | |
| other than sender are still routed to a moderator. This is similar to | |
| how some other lists work. Naturally, this is insecure because it | |
| relies on SENDER. Unsubscribe requests are always non-moderated, | |
| since, IOHO, it seems un-ethical to force a subscriber to remain on a | |
| list. Where an unsubscribe confirm request is sent out it is (also) | |
| sent to the target, except when the request was initiated by a | |
| moderator on a list with remote administration (DDIIRR//rreemmoottee exists). | |
| The (un)subscription target is always informed about completed | |
| (un)subscribe request, whether initiated by that address, another | |
| address, or by a moderator. Thus, attempts of a user or moderator to | |
| subscribe an address will be brought to the attention of the user | |
| receiving mail at that address. | |
| 2211..1111.. DDeenniiaall ooff sseerrvviiccee.. | |
| ezmlm-get(1) archive retrieval functions can be used to deplete system | |
| resources. However, this can also be done by posting messages to | |
| lists, mail bombing, etc. If you are worried about this, you can use a | |
| combination of ezmlm-manage/ezmlm-get ``-C'', ``-s'', and ``-P'' | |
| switches, removal of DDIIRR//ppuubblliicc, and removal of the mail-triggered | |
| digest function (by removing the digest code from the ezmlm-get(1) | |
| command line) to decrease availability of these functions (see man | |
| pages). Digest can also be triggered by direct execution of ezmlm-get | |
| from within a script from DDIIRR//eeddiittoorr as in the default setup with the | |
| ezmlm-make(1) ``-d'' switch. | |
| 2211..1122.. MMooddeerraattoorr aannoonnyymmiittyy.. | |
| Anyone getting messages from the list can see the ``Delivered-To: | |
| Moderator for ...'' header and realize that the list is moderated. In | |
| the authors opinion, this is fair and appropriate. If this bothers | |
| you, edit the source of eezzmmllmm--ssttoorree..cc. | |
| While the fact that the list is moderated will be disclosed by the | |
| headers, the moderator(s)' identity will not be disclosed by the | |
| header. Moderators are anonymous to anyone who cannot directly read | |
| the mail log, the moderator list, or monitor your outgoing and | |
| incoming mail. Anyone intercepting the acting moderators' mail or able | |
| to read the mail log can determine who took a particular action. | |
| Moderator E-mail addresses are not (to our knowledge) disclosed by any | |
| ezmlm mechanism. Thus, the poster does not know who rejected/accepted | |
| the message. Other moderators can find out that the message was | |
| accepted (by seeing it on the list or by themselves committing to a | |
| reject/accept reply) or rejected (by being informed by the poster or | |
| by themselves committing to a reject/accept reply). If no moderator | |
| takes any action for a given time (120 h - configurable to anything | |
| 24-240 h via DDIIRR//mmooddttiimmee - and the parameters are likewise | |
| configurable at compile time via iiddxx..hh) the message times out, an act | |
| for which no particular moderator can be held accountable. | |
| Subscription requests are acted upon only if a moderator completes the | |
| transaction by approving the requests. Requests can not be directly | |
| disapproved, but the associated cookie becomes invalid after | |
| approximately 11.6 days. Neither the subscriber nor the other | |
| moderators know which moderator accepted the subscription request. | |
| Requests to unsubscribe from the list are never moderated or otherwise | |
| controlled, except by requiring confirmation from the subscriber | |
| (normal unsubscribe) or the moderator that initiated the request | |
| (remote administration). If several moderators approve the same | |
| subscribe request, the user gets multiple notifications. | |
| The triggering message (the moderation approval or the moderator's | |
| completion of the subscription request) are not returned or logged. | |
| This protects moderator anonymity, but makes it harder to track down | |
| the offender in case of abuse. Only a good mail log will help. IOHO, | |
| abuse of these mechanisms requires considerably more effort that it is | |
| worth to (un)subscribe someone to a list. Also, IOHO, moderator | |
| anonymity is more important. If this increased difficulty in tracking | |
| down abusive behavior bothers you, don't use the remote administration | |
| and moderated subscription features. | |
| 2211..1133.. CCoonnffiiddeennttiiaalliittyy ooff ssuubbssccrriibbeerr EE--mmaaiill aaddddrreesssseess.. | |
| The optional ``-list'' command enabled by the ``-l'' ezmlm-manage(1) | |
| command line switch returns a subscriber list to the moderator. Again, | |
| anyone who can intercept a moderators' mail can fake SENDER and use | |
| this command to obtain a subscriber list. The use of local moderators | |
| minimize the risk. If the risk of subscriber disclosure is not worth | |
| this convenience, do not enable this feature. | |
| 2211..1144.. HHeellpp mmeessssaaggee ffoorr mmooddeerraattoorrss.. | |
| ezmlm-manage sends DDIIRR//tteexxtt//mmoodd--hheellpp, rather than DDIIRR//tteexxtt//hheellpp in | |
| reply to messages to list-help@host if the target address is a | |
| moderator. DDIIRR//tteexxtt//mmoodd--hheellpp should not contain secrets or other | |
| confidential information. | |
| 2211..1155.. SSuubblliissttss.. | |
| ezmlm sublists require that the message envelope sender is the main | |
| list, and that the message has a ``Mailing-List:'' header. Both are | |
| easy to fake, allowing an attacker to inject messages at the sublist | |
| level. Other than the possible ramifications of only a subset of | |
| subscribers seeing the message, this is of no concern for open lists. | |
| For a ``subscriber-only'' list based on SENDER checks, it is no harder | |
| to set SENDER to the address of a subscriber than to fake the headers | |
| required by the sublist. However, for a moderated list the mainlist to | |
| sublist communication becomes the weakest link. Sublists using a SQL | |
| database also use better authentication in this step (see ``SQL- | |
| enabled ezmlm lists''). | |
| A sublist user can unsubscribe a normal ezmlm sublist from the main | |
| list. To guard against this, you need to prevent propagation of | |
| unsubscribe confirm requests by the sublist. Easiest is to add a line | |
| to DDIIRR//eeddiittoorr before the ezmlm-send(1) line: | |
| |grep -i '^Subject: CONFIRM' >/dev/null 2>&1 && exit 99; exit 0 | |
| Another option would be to take advantage of the fact that DDIIRR//hheeaaddeerr-- | |
| aadddd headers at the main list are added to normal messages, but not to | |
| administrative messages. Thus, one could discard messages that lack | |
| the default ``Precedence: bulk'' header: | |
| |grep -i '^Precedence: bulk' >/dev/null 2>&1 || exit 99; exit 0 | |
| For lists with SQL-support, users cannot unsubscribe sublists (see | |
| ``SQL-enabled ezmlm lists''). | |
| Break-in at a sublist host for normal ezmlm lists leads to | |
| loss/compromise of the addresses handled by the sublist. For MySQL- | |
| enabled lists, the sublist access credentials give DELETE and SELECT | |
| access to all addresses serviced by the list. Thus, a successful | |
| sublist attacker can completely disable the list. The MySQL log (if | |
| used) will reveal from which host the attack was done. Although the | |
| potential damage to a SQL-enabled list is greater, the results are of | |
| the same order of magnitude. The risk in minimized by keeping control | |
| over all sublist hosts. A successful sublist attacker cannot normally | |
| add addresses, since the sublist users by default are set up without | |
| INSERT privileges to the address database. | |
| 2211..1166.. SSQQLL ddaattaabbaasseess.. | |
| For SQL-enabled lists, the database contains all list information. | |
| Subversion of your database server allows an attacker to add/remove | |
| addresses at will. This is also true for normal ezmlm lists. In | |
| addition, modification of the ``*_name'', ``*_cookie'', and ``*_mlog'' | |
| tables can cause the list to misbehave in a manner that doesn't | |
| immediately suggest a security breach. Keep your ezmlm list and | |
| database servers secure. | |
| 2211..1177.. RReeppoorrttiinngg sseeccuurriittyy pprroobblleemmss.. | |
| Please send private E-mail about any security problems with the ezmlm- | |
| idx additions to Bruce Guenter, bruce@untroubled.org. For ezmlm, | |
| please send them via private E-mail to Dan J. Bernstein, the author of | |
| ezmlm proper. | |