L-Soft international, Inc.
List Owner's Manual
for
LISTSERV®, version 1.8d
1 March 1999
Initial Release
The reference number of this document is 9903-UD-02.
Information in this document is subject to change without notice. Companies,
names and data used in examples herein are fictitious unless otherwise noted.
L-Soft international, Inc. does not endorse or approve the use of any of the
product names or trademarks appearing in this document.
Permission is granted to copy this document, at no charge and in its entirety,
provided that the copies are not used for commercial advantage, that the source
is cited and that the present copyright notice is included in all copies, so
that the recipients of such copies are equally bound to abide by the present
conditions. Prior written permission is required for any commercial use of this
document, in whole or in part, and for any partial reproduction of the contents
of this document exceeding 50 lines of up to 80 characters, or equivalent. The
title page, table of contents and index, if any, are not considered to be part
of the document for the purposes of this copyright notice, and can be freely
removed if present.
The purpose of this copyright is to protect your right to make free copies of
this manual for your friends and colleagues, to prevent publishers from using it
for commercial advantage, and to prevent ill-meaning people from altering the
meaning of the document by changing or removing a few paragraphs.
Copyright © 1996-1999, L-Soft international, Inc.
All Rights Reserved Worldwide.
LISTSERV is a registered trademark licensed to L-Soft international, Inc.
L-SOFT and LMail are trademarks of L-Soft international.
LSMTP is a trademark of L-Soft international, Inc.
EASE and CataList are service marks of L-Soft international, Inc.
UNIX is a registered trademark of X/Open Company Limited.
AIX and IBM are registered trademarks of International Business Machines Corporation.
Alpha AXP, Ultrix, OpenVMS and VMS are trademarks of Digital Equipment Corporation.
OSF/1 is a registered trademark of Open Software Foundation, Inc.
Microsoft is a registered trademark and Windows, Windows NT and Windows 95 are trademarks of Microsoft Corporation.
HP is a registered trademark of Hewlett-Packard Company.
Sun is a registered trademark of Sun Microsystems, Inc.
IRIX is a trademark of Silicon Graphics, Inc.
PMDF is a registered trademark of Innosoft International.
Pentium and Pentium Pro are registered trademarks of Intel Corporation.
Apple and Macintosh are registered trademarks of Apple Computer, Inc.
All other trademarks, both marked and not marked, are the property of their respective owners.
All of L-Soft's manuals for LISTSERV are available in ascii-text format via
LISTSERV and in popular word-processing formats via
ftp.lsoft.com. They are also available on the
World Wide Web at the following URL:
http://www.lsoft.com/manuals/index.html
L-Soft invites comment on its manuals. Please feel free to send your comments
via e-mail to MANUALS@LSOFT.COM, and mention which manual you are
commenting on. (However, please do not send support questions to this
address.)
"Hot fix" revisions to this and other L-Soft manuals are posted as they are made
to the master document, on the announcement-only mailing list:
LSOFT-DOC-UPDATES@PEACH.EASE.LSOFT.COM
Reference Number 9903-UD-02
2.1. Avoid duplication of effort
2.2. What skills do I need to start and maintain a LISTSERV mailing list?
2.3. Creating a mailing list -- Where can it be done, and Who can do it?
2.3.1. Naming Conventions
2.4. List Header Keywords and what they do
2.5. Sending commands to LISTSERV
2.6. Defining Personal Passwords
2.7. Retrieving the list -- some considerations
2.8. Editing the list header
2.9. Defining list owners
2.10. Storing the list on the host machine
2.11. Fixing mistakes
2.12. Security Options
2.12.1. First line of defense: The VALIDATE= keyword
2.12.2. Controlling subscription requests
2.12.3. Controlling the service area of your list
2.12.4. Controlling who may review the list of subscribers
2.12.5. Controlling who may access the notebook files
2.12.6. Controlling who may post mail to the list
2.12.7. The "OK" confirmation mechanism
2.12.8. Restricting subscriber privileges
2.12.9. Restricting the number of postings per user to the list per day
2.13. How to set up lists for specific purposes
2.13.1. Public discussion lists
2.13.2. Private discussion lists
2.13.3. Edited lists
2.13.4. Moderated lists
2.13.5. Semi-moderated lists
2.13.6. Self-moderated lists
2.13.7. Auto-responders
2.13.8. Announce-only lists
2.13.9. Restricted subscription lists with automatically-generated questionnaire
2.13.10. Peered lists
2.13.11. "Super-lists" and "sub-lists"
2.13.12. "Cloning" lists
2.14. List passwords are now obsolete
2.15. Allowing/Blocking MIME Attachments
3.1. Lists of Lists maintained by LISTSERV
3.2. Adding HTML to a list header for the CataList
3.2.1. Update latency
3.2.2. Inserting a pointer to another list
3.2.3. Restrictions on the placement of equal signs
3.3. Defining search categories in a list header for the CataList
3.3.1. Examples of category settings
3.4. The INFO <listname> command and how to implement it
3.5. The NEW-LIST project
3.6. The Internet Network Information Center (INTERNIC)
3.7. The Global List Exchange (GLX) and why you should mention it
3.8. How NOT to advertise a mailing list
4.1. How to add and delete subscribers to/from a list
4.1.1. Adding users whose address and real name exceed 80 characters
4.1.2. X.400 and X.500 addressing--Special Problems
4.1.3. Continuation card syntax
4.2. Finding users who do not appear in the list
4.3. Converting existing lists from other systems to LISTSERV
4.3.1. Converting mailing lists
4.3.2. Converting message archives
4.4. Adding subscribers to lists in bulk
4.5. Deleting subscribers from lists in bulk
4.6. Using the QUIET option with commands
4.7. Dealing with bounced mail
4.7.1. What is a bounce, and what can typically cause one?
4.7.2. The owner-listname address
4.7.3. What to do about several types of bounces
4.7.4. Redistribution and forwarding
4.7.5. "Sender:", "From:" or "Reply-To:" field in body causes bounce
4.8. Delivery error handling features
4.8.1. Auto-Delete considerations for holidays
4.9. Address probing
4.9.1. Active address probing
4.9.2. Passive address probing
4.10. Subscription confirmation
4.11. Subscription renewal
4.12. Using the SERVE command when a user is "served out"
5.1. How to review current subscription options with QUERY
5.2. How to set personal subscription options for subscribers
5.3. Options that may be set
5.3.1. Mail/NOMail
5.3.2. DIGest/NODIGest
5.3.3. MIME/NOMIME
5.3.4. INDex/NOINDex
5.3.5. ACK/NOACK/MSGack
5.3.6. Options for mail headers of incoming postings
5.3.7. Putting the list name into the Subject: field
5.3.8. CONCEAL/NOCONCEAL
5.3.9. REPro/NOREPro
5.3.10. TOPICS
5.3.11. POST/NOPOST
5.3.12. EDITOR/NOEDITOR
5.3.13. REVIEW/NOREVIEW
5.3.14. RENEW/NORENEW
5.4. Setting original default options with the Default-Options= keyword
6.1. List charters, welcome files, and administrative updates
6.2. The role of the list owner as moderator
6.3. The role of the list owner as editor
6.4. Setting up an edited list
6.5. Submitting subscriber contributions to an edited list
6.6. Message Approval with Send= Editor,Hold
6.7. Using list topics
6.8. The <listname> WELCOME and <listname> FAREWELL files
6.8.1. Creating and storing the listname WELCOME and FAREWELL files
6.8.2. Using the listname WELCOME file as a moderation tool
6.8.3. Using the listname FAREWELL file as a feedback tool
6.8.4. The alternative to using WELCOME and FAREWELL files
6.9. Social conventions (netiquette)
6.10. Spamming: what it is, and what to do about it
6.11. Appropriate use policies: considerations
7.1. What is the list archive?
7.2. Setting up and managing archive notebooks
7.2.2. Indexing available archive notebooks
7.2.3. Deleting existing archive notebooks
7.3. Database Functions Overview
7.3.1. LISTSERV Command Job Language Interpreter
7.3.2. A basic database session (VM servers running 1.8b or earlier only)
7.3.3. A basic database session (All servers running 1.8c or later only)
7.3.4. Narrowing the search
7.4. Where to find more information on Database Functions
8.1. What is the file archive?
8.2. Starting a file archive for your list
8.3. Filelist maintenance (VM systems only)
8.3.1. Retrieving the filelist
8.3.2. Adding file descriptors to the filelist
8.3.3. File Access Codes (FAC) for user access
8.3.4. Deleting file descriptors from the filelist
8.3.5. Storing the filelist
8.4. The listname.CATALOG system on non-VM systems (1.8c and later)
8.4.1. Updating the sub-catalog
8.4.2. Indexing the sub-catalog
8.5. Storing files on the host machine
8.6. Deleting files from the host machine
8.7. Automatic File Distribution (AFD) and File Update Information (FUI)
8.8. File "Packages"
8.9. Where to find more information on File Archives
9.1. What LISTSERV uses mail templates for
9.2. The DEFAULT.MAILTPL file and how to get a copy
9.3. Mail template format and embedded formatting commands
9.3.1. 8-bit characters in templates
9.4. Creating and editing a <listname>.MAILTPL file for a list
9.4.1. The INFO template form
9.4.2. Other useful template forms
9.4.3. Tips for using templates
9.5. Storing the <listname>.MAILTPL file on the host machine
9.6. Other template files: DIGEST-H and INDEX-H
9.7. Templates and template forms for the WWW interface
9.7.1. Forms contained in DEFAULT MAILTPL
9.7.2. The www_archive.mailtpl file
9.7.3. The default.wwwtpl file
9.7.4. The site.wwwtpl file (optional)
9.7.5. National language template files (idiom.mailtpl) (optional)
9.7.6. Template precedence
9.8. Using the DAYSEQ(n) function
9.8.1. Rotating bottom banner
9.8.2. Rotating FAQ via the PROBE1 template and "Renewal= xx-Daily"
9.8.3. Calculating the value for DAYSEQ()
10.1. Helping subscribers figure out the answers
10.2. Loop-checking can cause occasional problems with quoted replies
10.3. User can't unsubscribe and/or change personal options
10.4. Firewalls
10.5. What to do if LISTSERV won't store your list
10.6. If I can't find the answer, where do I turn?
11.1. Default LISTSERV Home Page
11.2. Logging in
11.3. Setting a LISTSERV password
11.4. The List Management main page
11.5. Maintaining subcriptions via the web
11.5.1. Examine or delete a subscription
11.5.2. Add a new user to the list
11.6. Maintaining the list header via the web
11.7. Customizing how a list's pages look
11.8. Maintaining mail and WWW templates via the web
11.9. Bulk operations via the web
11.10. Sending interactive commands via the web
11.11. Mail merge
List Owner's Manual
for
LISTSERV®, version 1.8d
1 March 1999
Initial Release
Copyright © 1996-1999, L-Soft international, Inc.
All Rights Reserved Worldwide
The reference number of this document is 9903-UD-02.
Generally, parameters used in this document can consist of 1 to 8 characters
from the following set:
A-Z 0-9 $#@+-_:
Deviations from this include:
|
fformat |
Netdata, Card, Disk, Punch, LPunch, UUencode, XXencode, VMSdump, MIME/text, MIME/Appl, Mail |
|
full_name |
first_name [middle_initial] surname (not your e-mail address) |
|
listname |
name of an existing list |
|
node |
Either: the fully-qualified domain name (FQDN) of an Internet host; or the BITNET nodeid or Internet hostname of a BITNET machine which has taken care of supplying an ':internet' tag in its BITEARN NODES entry; |
|
host |
Generally the same as node, but normally refers specificallly to the fully-qualified domain name (FQDN) of an Internet host rather than to a BITNET nodeid. |
|
pw |
a password containing characters from the set: A-Z 0-9 $#@_-?!|% |
|
userid |
Any valid RFC822 network address not longer than 80 characters; if omitted, the 'hostname' part defaults to that of the command originator |
Other deviations from the standard set will be noted along with the affected
commands.
Also please note the following conventions for representing variable or optional
parameters:
|
italic type |
always indicates required parameter names that must be replaced by appropriate data when sending commands to LISTSERV |
|
< > |
Angle brackets may sometimes enclose required parameter names that must be replaced by appropriate data when sending commands to LISTSERV. Sometimes used for clarity when italic type is inappropriate |
|
[ ] |
Square brackets enclose optional parameters which, if used, must be replaced by appropriate data when sending commands to LISTSERV |
LISTSERV® is a system that allows you to create, manage and control
electronic "mailing lists" on a corporate network or on the Internet. Since its
inception in 1986 for IBM mainframes on the BITNET academic network, LISTSERV
has been continually improved and expanded to become the predominant system in
use today. LISTSERV is now available for VM, OpenVMSTM, unix®, Windows NTTM,
and Windows 95/98TM.
Consider for a moment what the users of your electronic mail system actually use
electronic mail for. Do they discuss problems and issues that face your
organization, down to the departmental level? In an academic setting, do your
faculty and students communicate via electronic mail? As with "real world"
distribution lists, electronic mailing lists can make it possible for people to
confer in a painless manner via the written word. The electronic mail software
simply replaces the copying machine, with its associated costs, delays and
frustrations. In fact, electronic mail lists are easier to use than most modern
copiers, and a lot less likely to jam at just the worst possible moment.
Because electronic mail is delivered in a matter of seconds, or occasionally
minutes, electronic mailing lists can do a lot more than supplement the
traditional paper distribution lists. In some cases, an electronic mailing list
can replace a conference call. Even when a conference call is more suitable, the
electronic mailing list can prove a powerful tool for the distribution of
papers, figures and other material needed in preparation for the conference
call. And, when the call is over, it can be used to distribute a summary of the
discussion and the decisions that were made. What before might have been an
exchange of views between two or three people can now become an ongoing
conference on the issue or problem at hand. Announcement lists and even refereed
electronic journals can be made available to your audience, which can be as
small as a few people or as large as the entire Internet community.
If you need a further overview, please see Appendix D, Related Documentation
and Support, for information on how to get one.
Note: This chapter (and much of the balance of this manual) assumes that you are
administering your list by mail. LISTSERV 1.8d includes a new web administration
interface for lists which is described in Chapter 11 and which can handle most
of the operations described in this chapter.
Lists that are coded "Validate= Yes,Confirm,NoPW" or
"Validate= All,Confirm,NoPW" must imperatively be managed by
mail, since the web administration interface is secured by passwords and these
settings reject password validation, instead requiring validation by the "OK"
method.
Before you start your list, it pays to do a careful search in several places to
find out if you are duplicating an already-existing list, or if the name you are
considering is already in use for a list on a differing subject.
The first place to check is the "CataList" service maintained by LISTSERV
itself. This service lists all public lists running on LISTSERV servers
worldwide. Point your Web browser of choice at the URL
http://www.lsoft.com/CataList.html to access CataList.
If you don't have a web browser, you can alternately send the command
LISTS GLOBAL search_string
in the body of mail to LISTSERV@LISTSERV.NET (or to LISTSERV at any host site).
You will receive a mail message in return containing a list of all lists known
to LISTSERV where either the name of the list or the short list description
contains your search string. For instance, LISTS GLOBAL IBM
would result in the following being returned to you:
Excerpt from the LISTSERV lists known to LISTSERV@PEACH.EASE.LSOFT.COM
----------------------------------------------------------------------
30 Aug 1996 12:50
(search string: IBM)
Copyright 1996 L-Soft international, Inc.
L-Soft international, Inc. owns the copyright to this compilation of
Internet mailing lists (the "Compilation") and hereby grants you the
right to copy the enclosed information for the sole purpose of
identifying, locating and subscribing to mailing lists of interest. Any
other usages of the Compilation, including, without limitation,
solicitation, tele-marketing, "spamming", "mail-bombing" and "spoofing"
are strictly prohibited.
***********************************************************************
* To subscribe, send mail to LISTSERV@LISTSERV.NET with the following *
* command in the text (not the subject) of your message: *
* *
* SUBSCRIBE listname *
* *
* Replace 'listname' with the name in the first column of the table. *
***********************************************************************
Network-wide ID Full address and list description
--------------- ---------------------------------
9370-L 9370-L@NIC.SURFNET.NL
IBM 9370 and VM/IS specific topics list
|
Figure 2.1. Sample output of LISTS GLOBAL
IBM
(Quite a few more lists were deleted for brevity)
You might want to make your search more specific, as this particular search
locates every list that has IBM somewhere in its title. For instance, if you
wanted to start a list on some aspect of the IBM 370, you might do better to
search for IBM 370.
Alternative searches you can do include:
- Check the NEW-LIST archive on SCOUT.CS.WISC.EDU,
where the NEW-LIST project (originally at North Dakota State University,
now hosted by the Internet Scout Project) stores list announcements
starting with July 19982. The
NEW-LIST archive contains information about LISTSERV lists as well as
about lists running on other types of servers. This information is
accessible either via LISTSERV database searches or on the web at
http://SCOUT.CS.WISC.EDU/scout/new-list/
- Get a copy of the Interest Groups List of Lists maintained by SRI on its
server at sri.com. Note that this is a 500KB (or larger) file.
As of 6 March 1998 this file had not been updated for two years.
ftp sri.com
user: anonymous
password: your_user_id
cd netinfo
get interest-groups
- Check the Usenet newsgroups news.announce.newusers and
news.lists , if they are available to you via your local news
feed.
- Use one of the World Wide Web search engines such as Alta Vista or Yahoo!
to search for matches to the name you want to use.
You should already be familiar with your mailing system and text editor.
Otherwise, there are no special skills required. It is the goal of this manual
to give you what you need to know about LISTSERV user commands, privileged
LISTSERV owner commands, and how to read and interpret RFC822 Internet-style
mail headers. LISTSERV itself is designed to operate in an identical manner no
matter which operating system it is running under. Thus the fact that LISTSERV
is running under VM, VMS, some flavor of Unix, or Windows NT should not be a
concern to the list owner, who may not even know which version of LISTSERV his
lists are running on.
Additionally, we have made an attempt to give you a basic "list owner's course"
in anticipation of some of the issues you may encounter in the course of
moderating a list.
If you are looking for a site to host a list, consider the following:
- First, find out if your computing center maintains a LISTSERV host.
- If not, you might consider a commercial LISTSERV site. There are a number
of such sites, including L-Soft's own EASESM service. You can get
more information on EASESM by pointing a WWW browser at
http://www.lsoft.com/ease-head.html
Please note also that many sites (predominantly, but not necessarily limited to,
those in .EDU domains) will not host commercial or potentially-controversial
lists because of internal policies regarding appropriate use of their computing
facilities. In such a case, your only option may be to seek a commercial
LISTSERV site.
Physically creating the list is the task of the LISTSERV maintainer
(sometimes referred to as the "LISTSERV postmaster") at a given LISTSERV
host site3. Specific
procedures for requesting a list startup vary from institution to
institution. It is usually best to contact the computing center at the
site for more information.
Because most list owners do not have the appropriate permissions to create
lists, instructions on how to physically create lists are not included in this
manual. If you are a LISTSERV maintainer, you can find these instructions in the
Installation Guide that came with the software, or in the Site
Manager's Operations Manual for LISTSERV.
2.3.1. Naming Conventions
When choosing a name for a list, there are a few conventions and restrictions
that you should keep in mind.
The "-L" convention
The "-L" convention isn't required, but it can help people to realize that the
mail is coming from a mailing list rather than from a real person. The people we
are referring to here are people who run Internet mail systems, who may see a
great deal of mail coming from a single host and begin to wonder why. If it
comes from a userid that ends in a "-L", they will be more likely to recognize
it as list mail.
Reserved characters
Generally you want to avoid "special" characters such as the ones above the
number keys on your keyboard. For example, don't use:
|
! |
which can be confused for "bang-path" addressing, e.g., UUCP |
|
@ |
which is a reserved character |
|
# |
which can cause problems with some mail software which uses it for addressing |
|
$ |
which may have a special meaning to the unix shell |
|
% |
another addressing character that could cause problems |
|
& |
is sometimes reserved by non-unix systems (specifically on NT it has a special meaning to the shell). However, please note that use of this character in the name of a list or in a sendmail alias for a list will cause LISTSERV on unix to choke. Note that it is possible under unix to create a list with a "&" character in the name quite easily, and it is also possible to create a sendmail alias with a "&" character in the alias. That does not mean it will work. |
|
* |
is, of course, the wildcard character. |
|
() |
Parenthesis are generally reserved and can't be used in file names. |
|
+ |
The plus character should be avoided because recent versions of sendmail
deliver mail addressed to "user+whatever@somedomain" to "user@somedomain."
Whether or not this is an intelligent thing to do on sendmail's part is
left as an exercise for the user, but it can affect mail being sent to a
list with a "+" character in the listname. |
|
/ |
The slash character is reserved and can't be used in file names. |
|
. |
Although on some systems it is physically possible to create lists with a dot character in the name, in general LISTSERV will not accept this nomenclature. The only place a dot can or should be used is before the word "LIST" in the PUT command; e.g., PUT MYLIST-L.LIST is equivalent to PUT MYLIST-L LIST. |
|
" |
Double-quote characters are not allowed. |
It is best if you avoid the use of special characters altogether and stick
exclusively to the letters A-Z, numbers 0-9, and the underscore and hyphen
characters when naming lists. Note that the "_" (underscore) character may
cause problems with some non-compliant receiving systems. Also note that
the space character (ASCII 0x20) is illegal in a list name, and L-Soft
recommends that, although apostrophes (aka "single-quotes", ASCII 0x27)
are valid in an RFC822 username, they not be used in list names since
some mail programs may not accept them. (Prior to 1.8d, not all LISTSERV
commands will work for lists whose names contain an apostrophe.)
If you have any question about the validity of a particular name, you can of
course refer to RFC822 for the Internet standards for e-mail addressing.
Maximum length of the list name
The length of the list name (that is, the name of the list file and thus the
"official" name of the list) is restricted as follows:
| VM: | 8 characters |
| Non-VM: | unlimited (starting with 1.8c) |
If you need a longer list name for a list running on a VM server, you should use
the List-ID= keyword (see Appendix B).
PLEASE NOTE CAREFULLY that L-Soft recommends using names of 32 characters or
less whenever possible as they provide for correct alignment of the results
returned by certain commands. Very long (program generated) list names are
likely to conflict with mail system limits and L-Soft recommends other solutions
to the problem of dynamically generated lists. As a rule, list names in excess
of 70 characters are likely to result in mail delivery problems.
Make it easy on your users
While you can (within limits) name a LISTSERV mailing list just about anything
you want, you will probably want to follow a couple of simple guidelines:
1. Keep the name simple.
2. Keep the name as short as possible without causing confusion.
No doubt you could name a list MY-LIST-FOR-MATH-STUDIES, but who wants to type
that? Conversely, MLFMS-L wouldn't mean much to Joe Random User. Somewhere in
the middle is a reasonable compromise, e.g., MATH-STUDIES (or even just
MATH-S).
How a LISTSERV mailing list performs its tasks is defined by its header
keywords. There are several different categories of keywords, each of which is
discussed below in general terms. A complete alphabetical listing of list header
keywords, including default settings and all options available, is provided in
Appendix B.
Access Control Keywords. These keywords designate the level of
"openness" for a list. They determine who can post to the list, who can
review the list of subscribers, and whether or not the list is open to general
subscription.
Distribution Keywords. This group has to do with how LISTSERV
distributes postings to subscribers, including whether or not acknowledgments
are sent back to posters, how many postings may go through the list daily,
whether or not the list is available in digest form and whether it is available
to USENET through a gateway. These keywords also determine whether or not list
topics are enabled, and how LISTSERV will configure outgoing postings for
replies.
Error Handling Keywords. Included under this group are the
keywords controlling automatic deletion, loop-checking, and to whom error
messages are sent for disposition when received by LISTSERV.
List Maintenance and Moderation Keywords. A fairly large group of
keywords having to do with how the list is operated, including definitions for
the list owner, list editor, and the list archive notebook; whether or not (and
whom) to notify when users subscribe and sign off; how often subscriptions must
be renewed, and so forth. These are perhaps the most basic keywords that can be
set for a given list, and one of them ("Owner=") must be set for a list
to operate.
Security Keywords. These keywords control who can "see" the list
(that is, whether or not the list appears in the List of Lists for a given user,
based on the user's host site), and the level of security necessary for changes
to the list itself. The "Exit=" keyword is also contained in this group.
Subscription Keywords. These control whether or not the list is
open to general subscriptions, whether or not a mailing path confirmation is
required, and what user options are set by default upon subscription.
Other Keywords. These control other aspects of list management
that are not generally changed from their defaults, and which do not fit readily
into the categories listed above.
In the following sections, you will see numerous references to "sending commands
to LISTSERV". All LISTSERV commands are sent to the server either by email or
(in LISTSERV 1.8d and following) via the web administration interface described
in Chapter 11. For mailed commands, this means that you must create a new mail
message using whatever command this requires for your mail client (click on "New
message" or its equivalent for most mail clients) addressed to the LISTSERV
address. Let's say for the sake of argument that the list you want to subscribe
to (or are currently subscribed to) is running on a server called
LISTSERV.MYCORP.COM. In order to send a command to that
server, you would create a new message and address it to
LISTSERV@LISTSERV.MYCORP.COM , and place the command(s) in the
body (not the subject) of the message.
Depending on how you have security set up for your lists, some or all commands
may require that you validate them with a personal LISTSERV password.
The passwords recognized by LISTSERV for various operations (assuming that the
NOPW parameter is not used with the
"Validate=" keyword) are of two distinct types:
- Personal Passwords. LISTSERV can store a personal password in its signup
files corresponding to your userid. This password not only can be used for list
maintenance operations, but also protects your FUI (file update information) and
AFD (automatic file distribution) subscriptions (if available on your server)
and must be used to store your archive files, if any, on the server.
- List Passwords. Beginning with 1.8c, list passwords are obsolete (we are
mentioning them here only because users upgrading from earlier versions will be
aware of their existence). You should define and use a personal password for all
protected operations.
To add a personal password, send mail to LISTSERV with the command
PW ADD newpassword
in the body of the message. LISTSERV will request a confirmation via the "OK"
mechanism (see above) before it adds the password.
If you want to remove your password altogether, send the command
PW RESET
This command will also require confirmation.
And finally, if you simply want to change your personal password, send the
command
PW CHANGE newpassword [PW=oldpassword]
If you do not include the old password in the command (e.g., you've forgotten
it), LISTSERV will request an "OK" confirmation. Otherwise, it will act on the
command without need for further confirmation (unless, of course, the
oldpassword provided is incorrect).
Personal passwords may also be defined via the web administration interface at
login time.
If you are a LISTSERV maintainer, never attempt to hand-edit a production
list file in place and restart the server. The GET and PUT operations (or the
web administration interface/TCPGUI functions) are the only supported methods.
Particularly under unix and Windows, LISTSERV will not always accept the
hand-edited list file because some editors will insert control characters or
CR-LF combinations that LISTSERV cannot parse. Under VM or VMS, it is always
possible that hand-editing the list will introduce some sequence that will cause
an operational error. L-Soft suggests that this method be used sparingly, if at
all, and does not support it.
Once your list has been created by the LISTSERV maintainer, you can have a copy
of the list sent to you for editing purposes. Simply issue the command
GET listname (HEADER
to LISTSERV. This will cause the server to mail you a copy of the list header
only (without the subscriber list).
Note that you can retrieve the entire list, subscribers and all, by omitting the
(HEADER switch. However, L-Soft strongly discourages getting
the entire list at any time. This is because you do not need the entire list
file if all you want to do is to change list header keyword settings. Also,
since LISTSERV has well-documented commands available to manage user
subscriptions, you should never attempt to hand-edit a list file in order to add
or delete subscribers. Therefore there should normally be no reason to issue the
GET listname command without the
(HEADER switch.
The GET command automatically locks the list so that no
changes can be made to the operating copy on the server until you do one of two
things:
- Issue the UNLOCK listname command (if you decide no
changes are needed)
- Send the list back to the server with the PUT command.
Leaving the list locked also prevents new subscribers from signing up. It is
therefore not advisable to leave the list locked for long periods of time. This
necessitates remembering to issue the UNLOCK command if you
decide not to make any changes.
It is possible to request that LISTSERV not lock the list when it is sent to
you. This is accomplished by adding the (NOLOCK switch to the
GET command. You can use (NOLOCK and
(HEADER together as in the following example:
GET listname (HEADER NOLOCK
(Note that the "(" switch character is used only once.)
CAUTION: It is not advisable to use the (NOLOCK switch in at
least two cases:
- Don't use the (NOLOCK switch if you are not the sole owner
of the list. This prevents conflicting GETs and PUTs by different list owners.
For instance, Owner(A) GETs the list without locking it. Owner(B) then also GETs
the list. The owners make differing changes to the list header. Owner(B) PUTs
his changes back first. Owner(A) then PUTs his changes back, erasing every
change Owner(B) made. If Owner(A) had not used the (NOLOCK
switch, Owner(B) would not have been able to GET a copy of the list until
Owner(A) either unlocked the list or PUT his copy back. (Owner(B) could also
unlock the list himself, but it would be advisable to ask Owner(A) if he was
finished editing the list header before doing so.)
- Don't use the (NOLOCK switch if you get the entire list
rather than just the header. You will erase all subscriptions for users who
subscribed between the time you GET the list and PUT the list back. It is easier
to deal with questions as to why they got the "listname has been locked since
time by list-owner" message than to explain why they got a subscription
confirmation and now aren't getting list mail.
Another caution (1.8c and earlier): If you GET the header with
the (HEADER switch, do not add new subscribers "on the fly" to
the bottom of the header. If you do, your subsequent PUT will
replace the entire list online with what you have sent, canceling the
subscriptions of every user on the list (except for the ones you added to the
header). Note carefully that LISTSERV will parse a signature file as if it were
new subscribers; you should therefore turn off your signature file whenever you
PUT your list header.
Under 1.8d and following the above problem has been alleviated by the new
PUTALL command and a modification to PUT. A
PUT command containing new subscribers added "on the fly" will
result in only the header of the list being updated and a warning being
generated that says if you really wanted to PUT the entire
list, subscribers and all, that you should use the PUTALL
command.
LISTSERV maintainers should note one further caution: It is considered extremely
inadvisable to "hand-edit" subscriber lists, as columns at the far right of each
subscriber's entry contain list control codes corresponding to the subscriber's
personal option settings. The only case in which it might be appropriate to
"hand-edit" would be to delete a user entirely, and then only if all attempts to
delete the user via the DELETE command fail. For instance, X.400 or X.500
addresses can cause DELETE to fail because of their use of the "/" character.
You can use wildcards to delete these subscriptions. You can also enclose the
address in double quotes:
DELETE XYZ-L "/ADMD=ABC/PRMD=DEF/...../@X400.SOMEHOST.COM"
Finally, note that depending on your list configuration, you may have to use a
password or respond to a confirmation request in order to GET your list header.
The syntax for using a password with the GET command is
GET listname (options PW=password
For instance,
GET MYLIST-L (HEADER NOLOCK PW=MYPASSWORD
See the sections below regarding list passwords, personal passwords, and the
"OK" command confirmation feature.
Once the LISTSERV maintainer has notified you that the basic list has been
created, you can send a GET command to the server to make any
modifications necessary, as explained above. For instance,
GET MYLIST (HEADER PW=MYPASSWD
might cause LISTSERV to send you the following list header file:
PUT MYLIST.LIST PW=XXXXXXXX
* The Descriptive Title of My List
*
* Owner= NATHAN@LSOFT.COM (Nathan Brindle)
* Notebook= Yes,E:\LISTS\MYLIST-L,Monthly,Public
* Errors-To= Owner Send= Public
* Subscription= Open,Confirm Ack= Yes Confidential= No
* Validate= No Notify= No Reply-to= List,Respect
* Review= Public Default-Options= NoFiles,NoRepro
*
* This list installed on 96/11/02, running under L-Soft's LISTSERV
* for Windows NT.
*
* Comment lines...
* |
Figure 2.2. A sample list header file for a list called MYLIST.
You can now physically edit this file in a couple of different ways, depending
on what tools you have on your workstation:
In Figure 2.3, we've made some changes to the list header and it is ready to be included in a mail message and sent back to LISTSERV. Note that the PUT command has been modified to include your personal password (see 2.6 for instructions on how to obtain a personal password).
PUT MYLIST.LIST PW=MYPASSWD
* The Descriptive Title of My List
*
* Owner= NATHAN@LSOFT.COM (Nathan Brindle)
* Owner= Quiet:,nathan@linus.dc.lsoft.com,ncbnet@linus.dc.lsoft.com
* Notebook= Yes,A,Monthly,Public Auto-Delete= Yes,Full-Auto
* Errors-To= ncbnet@linus.dc.lsoft.com Subscription= Open,Confirm
* Ack= Yes Confidential= No Notify= No
* Validate= Yes,Confirm
* Reply-to= List,Respect Review= Public Send= Public
* Default-Options= NoFiles,NoRepro
*
* This list installed on 96/11/02, running under L-Soft's LISTSERV
* for Windows NT.
*
* Comment lines...
* |
Figure 2.3. The edited list header file ready to be sent back to the server.
If LISTSERV responds to your PUT operation with error
messages, bear in mind that the most common problems are:
- You sent the header back from an account which is not defined as a list
owner
- You used the wrong password or didn't specify a password in the
PUT command
- Your mail program indents paragraphs by default, such that each header line
does not start in column 1 and LISTSERV does not recognize your message as a
list header
- You sent the header file back as an attachment rather than as plain text in
the body of the message.
- Your mail client wrapped the lines of the header so that LISTSERV received
header lines that did not begin with "*" and attempted to treat them as
subscriber addresses. In this case you can probably solve the problem by
increasing the right margin setting in your mail client so that messages at
least 80 columns wide do not get wrapped.
List owners should be persons who will undertake the responsibility of managing
the list in all of its aspects. A list owner may be a moderator; a list owner
may be called upon to determine why a user can't unsubscribe from the list, or
to handle delivery errors, or to fix other problems that may arise.
The primary list owner (the first owner defined) has special responsibilities as
well. This owner is considered the Editor and the primary Moderator for lists
that have Send= Editor but do not haveEditor=
or Moderator= defined. This owner receives all
error messages when Errors-To= is set to "Owner". In short,
the primary list owner is generally the person who is ultimately responsible for
the workings of the list.
Secondary list owners fall into two categories: Quiet and non-Quiet.
- Non-Quiet list owners receive mail sent to the
listname-request address, and will receive error
messages if Errors-To= Owners.
- Quiet list owners will never receive delivery errors or other administrative
mail from LISTSERV.
Here is a sample list header excerpt for a list with all three types of list owners defined:
* Owner= NATHAN@LSOFT.COM (Nathan Brindle)
* Owner= nathan@linus.dc.lsoft.com
* Owner= Quiet:
* Owner= ncbnet@linus.dc.lsoft.com,cheng@linus.dc.lsoft.com
|
Figure 2.4. Example: How to define list owners in the list header file.
Note that all list owners defined after the * Owner= Quiet:
line will be quiet list owners.
You can define multiple owners on a single line by separating them with a comma.
Note that if you put "Quiet:" on a line with list owner userids, you must place
a comma after "Quiet:", e.g.
* Owner= Quiet:,ncbnet@linus.dc.lsoft.com,cheng@linus.dc.lsoft.com
There must always be at least one non-quiet list owner. Otherwise
LISTSERV sends all error messages and other administrative mail to the LISTSERV
maintainer by default.
When you are ready to store your list back on the host, include the list file in
a mail message to LISTSERV. Ensure that the PW=XXXXXXXX
command is in the first line of the mail body. Change XXXXXXXX
to the personal password you have previously defined with the PW ADD
command (see section 2.6). Then send the message.
If LISTSERV has trouble processing the edited list file, it will return a
discrepancy report to you with each error noted. If the errors are categorized
as "warnings only," LISTSERV will go ahead and store the list. However, if any
one error is categorized as a serious error, the list will not be stored and the
old version will be retained.
Caution: If you are using a mailer such as Pine or Microsoft Mail that allows
"attachments" to mail, do not "attach" the list file to your mail message. It
must be in plain text with the PUT line at the top. LISTSERV
will not translate encoded attachments.
LISTSERV always backs up the current list file before it stores a new copy.
Should you discover that you have made a mistake (for instance, you have deleted
all users by storing a header and adding users "on the fly"), it is possible to
retrieve the previous copy of the list by issuing a GET listname(OLD
command to the host server. You must then add the PUT
listname LIST PW=XXXXXXXX command to the top of the file and store it.
(In LISTSERV 1.8d and later you should use the PUTALL command
for this purpose since you will be storing the entire list, not just the
header.)
LISTSERV's security options are wide ranging, from almost no protection (easiest
to administer your list, but also most open to hacker attacks) to total
protection requiring validation of each and every command sent to LISTSERV for
your list. It is also possible to limit access to various aspects of your list,
such as who can subscribe, who can review the list of subscribers, and who can
access the list archives. You can hide your list from the LIST command, either
at the global level or from all requests, including those from users on
LISTSERV's local machine, or from a definable range in between.
2.12.1. First line of defense: The VALIDATE= keyword
The Validate= keyword controls the level of command validation
desired for your list. The default, Validate= No, requires
password validation only for storing the list on the server. This is often
sufficient for general needs. However, when a list is set this way, LISTSERV
only compares the RFC822 "Sender:"/"From:" headers against the
Owner= keyword(s) in the list header to determine whether or
not the person ostensibly sending the commands has authority to do so. Otherwise
at this level LISTSERV does not validate commands it receives for the list,
under the assumption that the mail it receives is genuinely coming from a list
owner. This level of validation does not protect the list from commands issued
by hackers who have forged mail in the name of the list owner. If you run a list
on a controversial topic or just don't feel comfortable without at least some
security, Validate= No is probably not for you.
The next level is Validate= Yes. At this level, LISTSERV
requires a password for all of its "protected" commands. This password is the
sender's personal LISTSERV password as defined by the PW ADD
command. The commands protected by this level are those that affect
subscriptions or the operation of the list, e.g., DELETE or
ADD. Users will also have to validate most commands that
affect their subscriptions, but generally can do so using the "OK" mechanism
rather than defining a personal password. Note that some user commands will be
forwarded to the list owner for validation rather than accepting password
validation from the user.
The next level is Validate= Yes,Confirm. At this level,
LISTSERV will require validation with the "OK" mechanism (see below) by default,
but will still accept passwords where appropriate. While the less-secure
passwords are still accepted, this is considered a good compromise between list
security and list owner and user convenience.
The next level is Validate= YES,Confirm,NoPW. At this level,
LISTSERV will no longer accept passwords as validation for protected commands.
The logic is that because of the way the "OK" mechanism is implemented,
passwords are not as safe as "magic cookies". This is the recommended setting
for lists that must be kept secure.
Two other levels are Validate= All,Confirm and
Validate= All,Confirm,NoPW. These levels require "OK" validation for
all commands that cause a change in state except for the PUT
command. If NoPW is not specified, passwords are accepted
where appropriate. With these levels, commands that do not cause a change in
state (e.g., QUERY) do not require validation.
Note that LISTSERV requests coming from the local system via CP MSG or CP SMSG
on VM systems or via LCMD on NT, VMS or Unix systems never require validation,
as they cannot be forged.
Lists which are set to either Validate= Yes,Confirm,NoPW or
Validate= All,Confirm,NoPW may not be managed via the web
administration interface, which is password-driven.
See Appendix B for more information on the Validate=
keyword.
2.12.2. Controlling subscription requests
You can control subscription requests by use of the
Subscription= keyword. By default, this keyword is set to
Subscription= By Owner, meaning that all
subscription requests will be forwarded to the list owner for disposition. You
can also refuse all subscription requests by setting Subscription=
Closed.
To code a list for open subscriptions without list owner intervention, you set
Subscription= Open. If you would like to add protection
against forged subscription requests or bad return mailing paths, code
Subscription= Open,Confirm. The latter will cause a
subscription confirmation request to be sent to the prospective subscriber,
which he or she must respond to using the "OK" confirmation mechanism.
In order to restrict subscriptions to persons in a specific service area, see
the next section.
2.12.3. Controlling the service area of your list
It may be desirable to restrict access to your list to people in a small area.
For instance, you probably would not want a list for students in a class section
at a university to be advertised or accessible by people all over the world.
However, without setting certain keywords appropriately, such a list will be
visible to a LIST GLOBAL command.
If you wish to simply hide your list from a LIST command, but
still allow people to subscribe to it if they know it is there, use the keyword
Confidential= Yes. Note that users subscribed to the list as
well as the list owner(s) will be able to see the list if they issue a
LIST command.
If you wish to hide your list from and refuse subscription requests from users
outside the local area, you define two keywords:
* Service= bitnode1,bitnode2,some.host.edu
* Confidential= SERVICE
Service= can also be set to Service= Local,
meaning it will use either LISTSERV's global definition of which machines are
Local, or the machines defined by the list keyword
Local=. If you wish to set Service to
Local, you should check with your LISTSERV maintainer to find
out which nodes are considered local. If the global definition is not suitable,
you can override it by defining the Local= keyword:
* Local= bitnode1,bitnode2,some.host.edu,another.host.com
* Service= Local
* Confidential= Service
If there are many subdomains within your primary domain, you may wish to use the
wildcard when defining the Local= or Service=
keywords. For instance:
* Service= HOST.COM,*.HOST.COM
defines the service area as "HOST.COM and all subdomains
ending in .HOST.COM".
2.12.4. Controlling who may review the list of subscribers
For whatever reason, you may wish to restrict the ability to review the
subscriber list either to subscribers or to list owners. This is done by setting
the Review= keyword appropriately.
To restrict reviews of the list to subscribers only, set Review=
Private. This is the default starting with LISTSERV 1.8c.
To restrict reviews of the list to list owners only, set Review=
Owners.
To allow anyone, including non-subscribers, to review the list, set
Review= Public. Prior to LISTSERV 1.8c this was the default;
it is no longer recommended to use this value unless your LISTSERV server is
operating on an intranet.
You can also restrict reviews to users within the list's service area by setting
Review= Service , and defining the Service=
keyword appropriately (see the preceding section).
2.12.5. Controlling who may access the notebook files
Restricting access to the list's notebook archive files is similar to
controlling who may review the list. It is accomplished by setting the fourth
parameter of the Notebook= keyword to an appropriate value.
For instance,
* Notebook= Yes,A,Monthly,Public
defines a monthly notebook on LISTSERV's A disk that is accessible by anyone.
Change Public to Private if you wish only
subscribers to be able to access the notebooks. The same access-levels are
available for this keyword as for Review=. (See Appendix B for
a discussion of access-levels.)
Note: The location (second) parameter of the Notebook= keyword
may be changed only by the LISTSERV maintainer.
If enabled, notebook archives are private by default.
2.12.6. Controlling who may post mail to the list
The Send= list header keyword is the basic control for who may
post mail to the list. If the list allows non-subscribers to post, set
Send= Public.
For a list that does not allow non-subscribers to post, set Send=
Private. (This is the default.)
If you want a further level of security for Send= Private, you
may set Send= Private,Confirm , which requires each poster to
confirm (via the "OK" mechanism) that the posting actually came from them. This
can help in cases where a hacker might be trying to "spoof" mail from an
otherwise legitimate subscriber. It is not recommended to set this in normal
circumstances.
For a list where all posts should be forwarded to a moderator/editor, there are
three settings:
- Send= Editor forwards all postings to the list editor (see
the Editor= and Moderator= keywords). This
setting allows the editor to make changes before forwarding the message back to
the list. Note that your mail program must be capable of inserting "Resent-"
header lines in your forwarded mail--if it is not capable of this, all such posts
forwarded to the list will appear to be coming from the editor. Check with your
system administrator if you are not sure whether or not your mail program
inserts the "Resent-" headers.
- Send= Editor,Hold forwards a copy of the posting to the
editor but differs from Send= Editor in that LISTSERV holds
the posting for a period of time (usually 7 days) until the editor confirms the
message with the "OK" mechanism (see below). Unconfirmed messages simply expire
and are flushed by LISTSERV, so there is no need to formally disapprove a
posting. This method of message confirmation is well-suited to lists where it is
not often necessary to modify the text of a posting, and also is an excellent
workaround if the editor's mail program does not generate "Resent-" headers in
forwarded mail.
Below is a sample of the editor-header for a list set to Send=
Editor,Hold:
Date: Tue, 4 Aug 1998 10:47:21 -0500
From: "L-Soft list server at PEACH.EASE.LSOFT.COM (1.8d)"
<LISTSERV@PEACH.EASE.LSOFT.COM>
Subject: B5-L: approval required (9723A0DD)
To: Joe ListOwner <joe@PRUNE.EXAMPLE.COM>
This message was originally submitted by jack@UNIX.FOO.COM to the B5-L list at
PEACH.EASE.LSOFT.COM. You can approve it using the "OK" mechanism, ignore it,
or repost an edited copy. The message will expire automatically and you do not
need to do anything if you just want to discard it. Please refer to the list
owner's guide if you are not familiar with the "OK" mechanism; these
instructions are being kept purposefully short for your convenience in
processing large numbers of messages.
----------------- Original message (ID=9723A0DD) (13 lines) -------------------
|
Figure 2.5. The editor-header for a list set to Send= Editor,Hold
- Send= Editor,Hold,Confirm is identical to
Send= Editor,Hold except that postings coming directly from an
editor must be confirmed (with the "OK" mechanism) by the editor who sent the
message. This is the recommended setting for any moderated list or
announce-only list as it protects the list from hackers who might try to forge
mail from a legitimate editor address.
A fourth method (called "self-moderation") exists for lists where subscribers
should be allowed to post freely, but non-subscriber posts should always be sent
to an editor for approval. To enable self-moderation, set
* Send= Editor
* Editor= userid@host,(listname)
Ensure that "listname" is in parenthesis. Note that self-moderation will catch
all posts from non-subscribers--including posts from subscribers who are posting
from a different address. For instance, if the subscriber originally signed up
as joe@foo.com but is posting from
joe@unix1.foo.com, LISTSERV will treat his mail as
non-subscriber mail. Self-moderation may require some slight changes in
individual user subscriptions in order for it to work seamlessly.
2.12.7. The "OK" confirmation mechanism
Depending on the setting of the Validate= list header keyword,
certain LISTSERV commands have always required a password for execution.
However, with a recognition that mail can be forged ("spoofed") by just about
anyone on the Internet today, L-Soft introduced a "magic cookie" method of
command validation that is considered much more secure than passwords.
In essence, the "magic cookie" method requires that the sender of the command
must confirm his command via a reply containing only the text "OK". (This is
actually simplistic; see below.) If mail is spoofed from the list owner's user
id, the command confirmation request will always be sent to the list owner's
user id, thus preventing the spoofer from confirming the command. Moreover, the
"cookie" itself (a six-digit hexidecimal number) is registered to the "From:"
user id of the original command.
A typical command confirmation request looks like this:
Date: Wed, 5 Aug 1998 09:50:06 -0400
From: "L-Soft list server at LISTSERV.EXAMPLE.COM (1.8d)"
<LISTSERV@LISTSERV.EXAMPLE.COM>
Subject: Command confirmation request (5C019D91)
To: joe_user@EXAMPLE.COM
Your command:
PW REP XXXXXXXX
requires confirmation. To confirm the execution of your command, simply
point your browser to the following URL:
http://listserv.example.com/scripts/wa.exe?OK=5C019D91
Alternatively, if you have no WWW access, you can reply to the present
message and type "ok" (without the quotes) as the text of your message.
Just the word "ok" - do not retype the command. This procedure will work
with any mail program that fully conforms to the Internet standards for
electronic mail. If you receive an error message, try sending a new
message to LISTSERV@LISTSERV.EXAMPLE.COM (without using the "reply"
function - this is very important) and type "ok 5C019D91" as the text of
your message.
Finally, your command will be cancelled automatically if LISTSERV does
not receive your confirmation within 48h. After that time, you must start
over and resend the command to get a new confirmation code. If you change
your mind and decide that you do NOT want to confirm the command, simply
discard the present message and let the request expire on its own.
|
Figure 2.6. A typical command confirmation request.
The general method of replying to a command confirmation request is as
follows:
- Under 1.8d and following, the suggested method is to use the web browser
confirmation method outlined in the confirmation request.
If you prefer, or if you are using 1.8c or 1.8b, you can use the old method of
responding by mail:
- REPLY to the command confirmation request with the text "ok" in the
body of the reply. (Non-case-sensitive) LISTSERV reads the "cookie" from the
subject line and if it corresponds to a held job, the job is released and
processed.
If this does not work, it is possible that the Subject: line was corrupted in
transit and you may need to try the following:
SEND a new message to LISTSERV with the text "ok xxxxxx" (where xxxxxx is
the command confirmation number from the original confirmation request) in the
body of the reply.
It is also possible to confirm multiple command confirmation requests with a
single message (for instance, if you have Send= Editor,Hold
and have a number of requests to be responded to). This eliminates multiple
"Message approved" mails from LISTSERV. However, make sure that you send the
confirmations in a new mail message rather than replying to one of them.
|
Note that confirmation requests for messages containing MIME attachments will
show the "raw" attachment. This is because LISTSERV does not generate MIME
headers for confirmation request messages. When the "OK" is sent, MIME
attachments will be processed correctly. |
Prior to LISTSERV 1.8d, the "OK" confirmations must come from the user id that
originated the command, i.e., you cannot send a command from one account and
then approve it from another.
Starting with 1.8d you can send the "OK" from any userid, which helps when the
address field of your mail gets changed somewhere along the line. For instance
if you are logged into the web administration interface as joe@example.com and
issue a command that requires mail confirmation, LISTSERV will send the request
to joe@example.com (as expected). If your mail system expands joe@example.com to
Joe_Doakes@mail.example.com, responding to the request under 1.8c would result
in a failure because the cookie and the address in your From: line wouldn't
correspond to what LISTSERV has on file. Under 1.8d the "OK" will succeed and
Joe_Doakes@mail.example.com will get a message that says
> ok
Confirming:
> QUIET DELETE * jane@example.com
[reply sent to joe@EXAMPLE.COM]
while as a protection against "spoofed" commands the actual command response
will be sent to joe@example.com like this:
jane@EXAMPLE.COM has been removed from the TEST list. No notification has
been sent.
Global deletion process complete, one entry removed.
Three further enhancements were added to the "OK" confirmation mechanism in
1.8d:
- An "OK" without an argument (confirmation number) flushes the job stream, so
any text following an "OK" on a line by itself will not be seen by the LISTSERV
command processor.
- Bracketed "OK" functionality. This feature allows you to send multiple
commands for which LISTSERV will request only a single "OK" (where normally you
would expect to have to "OK" each individual command). The syntax is as
follows:
OK BEGIN
command1
command2
[more commands, one per line]
commandn
OK END
- A command confirmation ("OK") may now be sent by clicking on a web URL
provided in the command confirmation request (mailed "OK"s are still perfectly
acceptable, of course).
2.12.8. Restricting subscriber privileges
Another security issue involves protecting the list from people who refuse to
play by the rules. LISTSERV includes several different levels of privilege
restriction for these users, some of which are available for use by list owners
without the intervention of the LISTSERV maintainer.
- The REVIEW personal option setting. By issuing a
SET listname REVIEW FOR userid@host command to LISTSERV, you
can moderate postings at the individual subscriber level. Postings from
subscribers set to REVIEW are passed on to the Editor(s) or Moderator(s) of the
list, or, if neither of these keywords are defined for your list, the postings
are passed on to the primary list owner. At this point, the person who receives
the postings can determine whether or not to approve them. Note that the
subscriber always receives notification that his or her posting has been
forwarded to a moderator for approval. This is to avoid the impression that the
subscriber's posting has been lost before reaching LISTSERV.
- The NOPOST personal option setting. By issuing a
SET listname NOPOST FOR userid@host command to LISTSERV, you
can prevent a subscriber from posting to the list entirely. LISTSERV will reject
postings from these subscribers and will not pass them on to a moderator. As
with the REVIEW setting, note that the subscriber always receives notification
that his or her posting has been rejected.
- The FILTER= list header keyword. You can filter
individual users from subscribing and/or posting to your list by adding them to
the Filter= list header keyword. For instance, if you have a
list called MACTALK-L and you want to discourage redistribution lists from using
the same name as your list, you can add
* Filter= Also,MACTALK-L@*
See Appendix B for more information on the Filter= syntax.
2.12.9. Restricting the number of postings per user to the list per day
Beginning with 1.8c, you can control the maximum number of postings per day
per subscriber on a list-by-list basis by setting the new (optional)
second parameter of the "Daily-Threshold=" list header keyword. The default is
to have no such daily limit per user.
If set, when the per-subscriber threshold is reached, the subscriber is told
that his message cannot be processed because he has reached the limit for today,
and that he should repost his message at a later time. The counter for this
limit resets to zero at midnight for all lists.
This limit is waived for the list owner(s) and any list editors/moderators.
If you want to set this limit, note that an overall daily threshold must be set
for the list in the first parameter of the keyword. If no "Daily-Threshold="
keyword is already present in your list header, the default is "Daily-Threshold=
50". Thus, to leave the default value in force and to add a daily limit of 5
postings per day per user, you would code:
* Daily-Threshold= 50,5
For more information see Appendix B.
2.13.1. Public discussion lists
Public discussion lists have always been the "classic" type of LISTSERV mailing
list. Such lists are available to discuss just about everything imaginable. In
the last few years it has become desirable to secure mailing lists against
random spamming and mailbombing, but no discussion of different types of lists
would really be complete without talking about this kind of list.
Typically, a public discussion list is wide-open (although some things, like the
ability to review the subscribership, may be restricted). Anyone can subscribe
(with a confirmation to verify the mailing path), anyone can post, anyone can
read the messages in the archives, and security is set fairly low. Very large
lists (hundreds or even thousands of users with hundreds of postings every week)
may likely be set up this way as it is a "low-maintenance" way to run a list
(and most spams tend to be caught by LISTSERV's anti-spamming filters anyway).
For instance you might have
* My public discussion list (MYLIST-L)
* Subscription= Open,Confirm
* Ack= Yes
* Confidential= No
* Validate= No
* Reply-to= List,Respect
* Review= Owners Send= Public Errors-To= Owner
* Owner= joe@example.com
* Notebook= Yes,E:\LISTS\MYLIST-L,Weekly,Public
For more security, you might want to code
* Validate= Yes,Confirm
and if you want to cut down on the amount of "me-too"ism on the list, you could
set
* Reply-to= Sender,Respect
to force the default Reply-To: header to point back to the original poster
instead of to the list.
There is one major caveat with regard to the use of the Reply-To= list
header keyword. You should note carefully that not all subscriber-side
mail clients either recognize or properly handle an RFC822 "Reply-To:"
header. This may result in users posting replies to your list even though
LISTSERV put the correct Reply-To: header on the mail. There is absolutely
nothing that L-Soft can do to correct this problem since it exists on the
subscriber's end in non-compliant mail software that L-Soft does not and
cannot support.
2.13.2. Private discussion lists
Private discussion lists are similar to public discussion lists, but with
varying restrictions on who may subscribe, who may post and who may view the
archives. Such lists are relatively safe from random spamming since typically
only a subscriber can post (but note that a spammer spoofing mail from a
subscriber's address will probably be successful unless first caught by the
anti-spamming filters). For instance:
* My private discussion list (PRIVATE-L)
* Subscription= By Owner
* Ack= Yes
* Confidential= Service
* Validate= No
* Reply-to= List,Respect
* Review= Owners
* Send= Private
* Errors-To= Owner
* Owner= joe@example.com
* Notebook= Yes,E:\LISTS\PRIVATE-L,Weekly,Public
is a low-security private discussion list where subscriptions requests are
passed on to the list owner(s) for review, only subscribers may post, and only
subscribers may view the list archives. Here again, for more security you might
want to set "Validate= Yes,Confirm", and of course you can
have replies go to the original poster rather than to the list with
"Reply-To= Sender,Respect".
2.13.3. Edited lists
An edited list is one which requires a human editor to approve messages sent to
the list. Some list software and most USENET newsgroups refer to this as
"moderation", but to avoid confusion between two types of moderated LISTSERV
lists, the present example will be referred to as an "edited" list.
Examples of edited lists range from refereed electronic journals to lists where
the list owner simply wishes to exercise control over which postings are allowed
to go to the list.
To set up a basic edited list, simply add
* Send= Editor
* Editor= someuser@somehost.com
to the basic list header. Note that the primary Editor= specification (that is,
the first editor defined by an Editor= keyword for the list) must be a human
person who will be able to act on postings sent to him or her for approval. You
may not use an access-level specification (such as "Owner") when defining
the primary editor for a list.
Please note that L-Soft recommends setting "Send= Editor,Confirm" so as to add a
level of security against malicious users forging mail from an "Editor=" address
to get around your moderation settings, or against badly-configured "vacation"
programs that simply reflect the message back to the list in a manner that makes
it appear that the mail is coming from the editor's address. The "Confirm"
option causes LISTSERV to request an "OK" confirmation from an editor when it
receives mail claiming to be from that editor.
You can define multiple editors, but only the first editor will receive postings
for approval. Anyone defined as an editor may post directly to the list without
further intervention. Multiple editors can be defined on separate Editor= lines
or can be grouped several on a line, e.g.,
* Editor= someuser@somehost.com,anotheruser@anotherhost.com
* Editor= yetanotheruser@his.host.com
To approve postings with the above configuration, the editor simply forwards (or
"resends", or "bounces"--the terminology is unclear between various mail
programs) the posting back to the list address after making any desired changes
to the content. This should be done with a mail program that supports
"Resent-" fields; if "Resent-" fields are not found by LISTSERV in the headers
of the approved posting, the posting will appear as coming from the editor's
address rather than from the original poster. If your mail program does not
support "Resent-" fields, you should use the "Send= Editor,Hold" option and
approve messages with the "OK" mechanism described below.
If you do not need to physically edit the content of your users' posts (for
instance, to remove anything considered "off-topic" or to remove included mail
headers and so forth), you can code
* Send= Editor,Hold
The "Hold" parameter causes LISTSERV to send you a copy of the posting along
with a "command confirmation request". To approve the posting, you simply reply
to the confirmation request with "ok".
For security purposes, you can code
* Send= Editor,Confirm
which will cause LISTSERV to request a command confirmation ("ok") from the
editor sending the approved posting back to the list. This makes it impossible
for an outside user to "spoof" mail from an Editor address.
Naturally, you can also code
* Send= Editor,Hold,Confirm
Finally, please note that the NOPOST subscriber option will
take precedence over Editor=, if set for someone defined as an
editor. This means that if you have "Default-Options= NOPOST"
for your list and you add an editor as a subscriber, you will have to manually
reset the editor to POST (with "SET
listname POST FOR userid@host") before things will work
properly. You will know that this is necessary if your editor can successfully
approve postings but is then told that he or she cannot post to the list.
2.13.4. Moderated lists
Note: The Moderator= keyword is disabled in LISTSERV Lite.
A moderated list is similar to an edited list, but for LISTSERV's purposes it
refers to a list that uses the Moderator= list header keyword to "load-share"
posting approvals among several editors. It is set up similarly to an edited
list, as follows:
* Send= Editor,Confirm
* Editor= someuser@somehost.com
* Moderator= someuser@somehost.com,anotheruser@anotherhost.com
* Moderator= yetanotheruser@his.host.com
This list will "load-share" the approval process between the three moderators,
who will each receive one-third of the postings for approval. Note that a
primary editor should still be defined.
If it is desired to have one editor handle more than a single share of the
approvals, you simply define the editor more than once in Moderator=. For
instance,
* Send= Editor,Confirm
* Editor= someuser@somehost.com
* Moderator= someuser@somehost.com,anotheruser@anotherhost.com
* Moderator= someuser@somehost.com,yetanotheruser@his.host.com
would cause every other posting to be forwarded to someuser@somehost.com for
approval.
Beginning with 1.8c, if the parameter "All" is coded at the beginning of the
list of moderators, LISTSERV will send copies of all postings to all moderators,
any of whom may approve the message. An example of this would be
* Moderator= All,kent@net.police.net,joe@bar.edu
Please note that something like
* Moderator= kent@net.police.net,All,joe@bar.edu,alex@reges.com
is not valid. "All" must appear at the beginning of the list of moderators.
Assuming "Send= Editor, Hold", once a message is approved by one of the
moderators, any other moderator attempting to approve the same message will be
told that the message cannot be found and has probably expired (since the cookie
for that message will be gone).
If the message body is edited in any way before it is approved (i.e., by
forwarding an edited copy back to the list), and more than one moderator is
involved, duplicates are possible. Thus it is important that the moderators of
any list set up this way pay close attention to whether or not the posting has
already been approved by another moderator. Note carefully that this means if
the "All" parameter is used in "Moderator=" with "Send= Editor" (that is,
without the "Hold" parameter), again a separate synchronization method will have
to be used to prevent duplicates, as two moderators are unlikely to make exactly
the same edits to the message. Even if LISTSERV were able to identify the two
submissions as being the same message, it would not know which to choose over
the other.
2.13.5. Semi-moderated lists
"Semi-moderation" was developed some years ago after a great debate on whether
or not an "urgent" message should be allowed to be posted to an edited list
without having to go through the approval process. Although this option is still
available, it can be misused by anyone who knows about it, and is therefore not
generally recommended for use. However, should this feature be deemed necessary,
it is activated by setting
* Send= Editor,Semi-Moderated
Then anyone needing to send an "urgent" message to the list simply types
"Urgent:" in the subject line of their mail, followed by the subject of the
message. Messages that do not have the "Urgent:" subject are forwarded to the
list editor for approval as usual.
2.13.6. Self-moderated lists
So-called "self-moderated" lists were invented in 1993 or 1994 when the current
epidemic of spamming was beginning to get cranked up and before the "spam
filter" was developed by L-Soft. With the spam filter in operation,
self-moderation is not as much of an issue anymore, but some lists still run
this way.
Self-moderation takes advantage of the ability to make an access-level a
secondary list editor, and is implemented as follows:
* Send= Editor,Confirm
* Editor= someone@someplace.com,(listname)
(The "Hold" and "Confirm" parameters for "Send=" may naturally be used if
required. L-Soft recommends that "Confirm" be used by default.)
Usually, one of the list owners is the primary editor (here
"someone@someplace.com") and the specification of
(listname) makes all of the subscribers of the
listname list editors, and thus eligible to send
messages directly to the list without editor intervention. Postings from
non-subscribers (e.g., spammers) are deflected to the primary owner for his or
her disposition.
There is one caveat to this kind of list. If a user subscribes to the list, and
later his mail address changes (for instance, the hostname changes slightly but
mail sent to the old address is automatically forwarded to the new address), any
postings from him to the list from the new address will be forwarded to the
editor because the new address is not subscribed to the list. Thus there is a
certain amount of list-owner overhead on this kind of list in keeping track of
users whose addresses have changed and modifying the subscriber list to reflect
those changes.
2.13.7. Auto-responders
Since LISTSERV Lite does not support list-level mail templates, this
functionality is effectively not available in LISTSERV Lite.
An "auto-responder" is a type of list that simply responds with a set message
whenever it receives mail from someone. This kind of list can be useful for
things like service messages or upgrade availability, or even to simply send
back a standardized message to a user who has sent mail to a "support"
address.
A simple auto-responder header might look like this:
* Auto-responder for service messages
* Owner= someone@someplace.com
* Send= Public Notebook= No Subscription= Closed
In other words, it can be very simple, since you probably don't want notebook
archives for this kind of auto-responder, you don't want people to subscribe to
the list as it isn't really a mailing list, and so forth. To make the
auto-response message for this list, you'd then create a
listname.MAILTPL file (see chapter 10 for details) that
includes a POSTACK1 template, like the following:
>>> POSTACK1 Service Message for &MYNAMES
&MYNAMES will be down Sunday from 0200 EST until 0500 EST for backups
and upgrades. For more information contact LSTMAINT@&MYHOST.
This particular template would inform the user that LISTSERV would be down
(&MYNAMES translates to LISTSERV@NODE
where NODE is the value of NODE= in the
system configuration file) and to send questions to LSTMAINT@
the local host. In order to change the service message, it would be necessary
only to change the POSTACK1 template.
2.13.8. Announce-only lists
An "announce-only" list would be used to distribute a newsletter or other timely
information where responses to the list are neither expected nor desired. A
typical announce-only list header might look like this:
* The FOO Product Announcment List
*
* Owner= foo@myhost.com
* Owner= Quiet:
* Owner= anotheruser@myhost.com,yetanotheruser@myhost.com
* Editor= foo@myhost.com
* Editor= anotheruser@myhost.com,yetanotheruser@myhost.com
* Notebook= No
* Errors-To= Owner
* Subscription= Open,Confirm
* Validate= No
* Review= Owners
* Send= Editor,Confirm
* Reply-To= foo@myhost.com,Ignore
* Sender= None
This list is set up so that generally any response to postings will go back to
foo@myhost.com, which might be a special account set up specifically to handle
such things, or a mail alias pointing to another account. The newsletter can be
posted by foo, or anotheruser, or
yetanotheruser, all of whom are editors, but the likelihood is
that it would be posted from the foo userid so that the From:
line would read "From: foo@myhost.com".
2.13.9. Restricted subscription lists with automatically-generated questionnaire
Since LISTSERV Lite does not support list-level mail templates, this
functionality is effectively not available in LISTSERV Lite.
Sometimes it is desired to send out a little questionnaire before approving a
subscription to a list with a very narrowly-defined topic or to lists created
for members of specific organizations. By setting "Subscription= By
Owner", you can of course force all potential subscriptions to require
list owner approval. In the "old days", if you wanted more information before
you approved the subscription request, you had to manually send a questionnaire
out to the user and wait for him or her to return it to you.
By setting "Subscription= By Owner" and adding two simple
template forms to your listname.MAILTPL (as explained
in chapter 9), you can now have LISTSERV send your questionnaire out
automatically, as soon as the subscription request is received.
The first template form you need to add to
listname.MAILTPL is called SUB_OWNER,
and in this case it would typically look like this:
>>> SUB_OWNER &LISTNAME: &WHOM requested to join
.TO &WHOM
A copy of the &LISTNAME membership questionnaire has been sent
to you. Please read it carefully and follow the instructions
to complete it and return it to the list owners.
The .TO &WHOM directive is required so that the message is
sent to the subscriber rather than to the list owner. If you want the non-quiet
list owners to receive a copy of this message (which is admittedly unlikely),
you can simply add CC: &OWNERS to the end of the
.TO line, e.g.,
.TO &WHOM CC: &OWNERS
Or, if you want to cc: a specific user such as joe@unix1.example.com, use
.TO &WHOM CC: joe@unix1.example.com
Note that you cannot format the SUB_OWNER template; it all
comes out as one long paragraph without formatting no matter what you do,
because it is a "linear" template. But you should modify it from the default to
let people know that they will receive a questionnaire to be filled out and
returned.
The second template form you need to add to
listname.MAILTPL is called ADDREQ1
and it can be as simple or as detailed as you want. All of the available
template formatting commands can be used in ADDREQ1. For
instance:
>>> ADDREQ1 &LISTNAME Membership Survey
.RE OWNERS
.TO &WHOM
.CE &LISTNAME Membership Survey
NOTE: Please make sure when you send this back that it goes to
the address &LISTNAME-Request@&MYHOST. Thanks.
This is a standard questionnaire required for all prospective
subscribers to &LISTNAME. Blah blah blah...
In this case you want the message to go to the subscriber, with a Reply-To:
header pointing back to the (non-quiet) list owners. The first line indicating
the return address is added for those users with mail clients that don't
recognize Reply-To: headers.
You can also put a pre-formatted ADD job into the
questionnaire to simplify your job when the questionnaire comes back. For
instance,
.fo off
----------------------------------------------------------------
For List Owner's Use Only -- Be sure to include with your Reply
----------------------------------------------------------------
// JOB
ADD &LISTNAME &WHOM &USERNAME
// EOJ
----------------------------------------------------------------
.fo on
For more detailed information on mail templates, see chapter 9.
2.13.10. Peered lists
This functionality is not available in LISTSERV Lite.
Please consult your LISTSERV maintainer before peering lists.
Occasionally the need to split a very large list may arise. This was more common
when LISTSERV ran only on BITNET, whereas the TCP/IP version of LISTSERV is not
limited by BITNET constraints. However, because of the fact that subscribers may
be scattered all over the world, in rare cases it can make sense to split (or
"peer") a list and share the mail load among two or more LISTSERV servers.
Peering also makes it possible to have list archives located in more than one
place; for example, a list might be peered between a European host and a North
American host, making it possible for subscribers on each continent to retrieve
archives from the nearer host.
Although there is no problem about peering to another L-Soft LISTSERV list,
linking to a non-L-Soft mailing list manager is not supported and
can and will cause serious problems (including mailing loops) for which L-Soft
international, Inc. could not be held responsible.
After the link operation has been completed, it is recommended that you define
"Peers=" keywords on lists you just linked. For lists running on LISTSERV for
VM, this makes it possible to EXPLODE them for better network
efficiency. (Because peering is not widely used today, it is unlikely that the
EXPLODE command will be ported to other platforms.)
Note also that the peer lists MUST have the same list password
(PW= list header keyword setting) or messages approved on one
peer will not be accepted by the other peer and an error message will be
generated, i.e.,
The approval request code received together with your posting for the MYLIST-L
list is incorrect. For a peered list, this may be a normal condition. The
approval protocol is not guaranteed to work among peer chains with pre-1.8b
servers, and will also fail if the peers have a different password. For a
non-peered list, the only likely explanation is a failure in the mail system or
a recent change in mail system version or configuration. At any rate, please
resubmit your message and go through the approval procedure a second time, and
contact the LISTSERV administrator if the problem persists.
------------------------ Rejected message (73 lines) --------------------------
This means that under LISTSERV 1.8c and later you must explicitly set the
PW= list header keyword for each peer and not use the password
LISTSERV generates automatically at list creation time. This is the only
situation in which the PW= keyword must explicitly be set to a
specific value.
Moving users from one (peer) server to another:
You should be aware of the fact that a MOVE operation is not
just an ADD to the new server and a DELete
to the current one. This would effectively transfer the person from the old
server to the new one but his distribution options would be lost in the process.
Besides, you should make sure that the user does not lose any mail in the
process. The proper course of action to be taken when people are moved from one
list to the other is the following:
1. Send mail to the list telling people that a new peer server is being linked
to the list, and that some subscribers will be moved to it.
2a. If the prerequisites for using the MOVE command are met,
you should use either individual MOVE commands (in the case
that there are very few users to move) or a batch-MOVE command
with associated DDname (see the LISTJOB MEMO guide for more
information on commands-jobs) to move the users. You may want to use the
QUIET option to suppress notification if there are a lot of
users to move.
Warning: the MOVE command should not be used to move peer list
servers. See the MOVE command description for more
details.
If you cannot use the MOVE command, you should try one of the
following two methods:
2b. For each user to be moved, issue the following commands in the following
order:
- Query listname FOR userid@host (old server),
write down the options.
- QUIET ADD listname userid@host full_name
- QUIET SET listname options FOR
userid@host
- Wait until you get confirmation for the two previous commands
- QUIET DELete listname userid@host (old server)
2c. If there are a lot of users to move, the following method is preferred:
- GET listname (old server)
- GET listname (new server)
- If you are using VM XEDIT: Receive both files and use the
XEDIT "PUT" and "GET" commands to move users from one list to the other. You
must preserve the contents of columns 81-100 across the move.
- If you are using another text editor: Make sure that the
editor you are using does not "imbed" control codes such as line breaks, tabs or
word-wrapping characters into the text when you edit it. Use the cut and paste
controls to copy lines in their entirety. You must preserve the
contents of columns 81-100 across the move. Imbedded control codes and/or word
wrap will generate errors when the list is stored back on the server.
- Store the two lists back on their respective servers.
Special commands for peered lists only
ADDHere listname userid@host <full_name> <PW=list_password>
The ADDHERE command is strictly identical to ADD, with the
exception that the placement of the user is not checked against the list of peer
servers, i.e. the specified user is added to the local list without any further
verification. (By comparison, the ADD command causes LISTSERV to check
automatically to see if there is no better-suited peer list for the specified
user.)
EXPLODE listname <F=fformat> [VM only]
The EXPLODE command provides a means whereby a list can be
automatically analyzed by LISTSERV to optimize the placement of its recipients
over the various peer servers hosting the list. It requires a "Peers=" keyword
to be defined in the list header (see Appendix B). Non-BITNET userids will be
exploded according to the network address of the corresponding gateway (as per
the SERVICE NAMES file), or ignored if the gateway could not be identified.
LISTSERV will create a commands-job file containing the necessary
MOVE command to transfer all the users which were found to be
(possibly) mis-allocated to the peer server which is nearest to them. This file
will then be sent to you so that you can review it before sending it back to the
server for execution.
MOVE listname userid@host <TO> newhost <PW=list_password>
DD=ddname listid@newhost [VM only]
The MOVE command allows list owners to easily move users from
one peer server to another. It will move the complete user entry from the source
server to the destination one, including full name as it appears in the
specified list and all list distribution options. The MOVE
operation will be done in such a way that no mail can possibly be lost by the
target while the MOVE operation is in progress (duplicate mail
might be received for a short duration, however). Notification will be sent to
the target user unless the QUIET option was used.
If the source and destination list names are identical, only the destination
node ('newhost') needs be specified. Otherwise, the full network address
('listid@newhost') must be specified.
The MOVE command requires both source and destination lists to
have the same password. Since each server will have to send a password to the
other to validate the (special) ADD/DELETE commands it is
sending to the other, it has potentially a way to trap the password specified by
the server, thus thwarting any attempt at inventing a protocol to allow use of
this command on lists which have a different password. Besides, no
MOVE operation will be accepted on lists which do not have a
password at all, because for technical reasons it would allow unauthorized users
to easily add someone to a list (since there would be no password
validation).
The MOVE command is the proper way to effect a move operation.
You should not use any other command/set of commands unless you cannot use
MOVE. THE MOVE COMMAND SHOULD NOT BE USED TO
MOVE DISTRIBUTION LISTS!!! Since a MOVE is basically an
ADD + DELETE, with the latter being done
only AFTER the ADD is completed, moving a distribution list
address with the MOVE command can cause a duplicate link to be
defined for a short period of time. This could result in a transient mailing
loop, which could become permanent if the size of the looping mailfiles is less
than the size of the inter-servers "DELETE" command jobfile, and the RSCS
priority of the latter has been altered.
2.13.11. "Super-lists" and "sub-lists"
This functionality is not available in LISTSERV Lite.
Please note that the LISTSERV maintainer must create the super-list.
In LISTSERV 1.8c it is possible to define a "super-list" (as in opposite of
sub-list), that is, a "container" list that includes all the subscribers in a
predefined set of sub-lists. This can be done recursively to any depth. Only the
LISTSERV maintainer can create a super-list, for security reasons. Concretely,
the "Sub-lists=" keyword is protected from owner tampering in the same fashion
as "Notebook=". The value is a comma separated list of all the sub-lists, which
must all be on the same (local) machine. For instance:
* Sub-lists= MYLIST-L,MYOTHERLIST-L
The default value for this keyword is null, e.g., to have no sublists. Please
note that the super-list and all of its sublists must reside on the same
LISTSERV server.
The only difference between a normal list and a super-list is what happens when
you post to it. With the super-list, the membership of all the sub-lists is
added (recursively) and duplicates are suppressed. Other than that, the
super-list is a normal list with its own archives, access control, etc. You can
even subscribe to it, and this is actually an important aspect of the operation
of super-lists. If you are subscribed to the super-list itself, the subscription
options used to deliver super-messages to you are taken from your subscription
to the super-list, just like with any other list. All combinations are allowed,
and in particular NOMAIL is allowed, meaning you don't want to get messages
posted to the super-list. When you are subscribed to multiple sub-lists, on the
other hand, things work differently:
- NOMAIL subscriptions are ignored. You will get the super-message if you have
an active (not NOMAIL) subscription to at least one sub-list. The idea is that
the super-message must be equivalent to posting to all the sub-lists, without
the duplicates. Since all it takes to get a message posted to all the sub-lists
is a single non-NOMAIL subscription, this is how the super-list works. The only
way not to get the super-messages is to subscribe to the super-list directly and
set yourself to NOMAIL.
- The DIGEST and INDEX options are ignored and internally converted to MAIL.
The first reason is that, since in most cases the user will be on multiple
sub-lists (otherwise you don't need a super-list in the first place), the only
safe method to set subscription options for super-messages is by subscribing to
the super-list so that there is no ambiguity. The second reason is that, in most
cases, super-lists will be used for out of band administrative messages rather
than for large volume discussions, so it is actually preferable to have the
message sent directly. The third reason is that the super-list and sub-lists may
not necessarily offer the same options (DIGEST and INDEX). In particular it is
expected that many super-lists will not have archives. If you want a DIGEST or
INDEX for the super-messages, you must subscribe to the super-list directly.
Topics, if defined, are evaluated on a per-list basis. That is, for every
sub-list (and for the super-list), LISTSERV determines whether the topic of the
message is one that you want to see. If not, it acts as if you were not
subscribed to this particular list. Roughly speaking, this works very well if
all the sub-lists have the same set of topics (or a well-defined set of common
topics), and doesn't work well at all if every list has its own set of topics.
Postings to a super-list are always archived in the super-list's notebooks (if
enabled), and never in the notebooks of the sub-lists. This is because by its
nature a posting to the super-list is not equivalent to cross-posting a message
to all of the sub-lists. Rather, LISTSERV recurses into the sub-lists and
generates an "on the fly" listing of all of the users on the super-list and the
sub-lists (this is how it avoids duplicates, among other things) and then treats
this "on the fly" listing as if it were the subscriber list of the super-list
itself. You will note that a super-list posting is always identified as coming
from the super-list, regardless of whether a given user is subscribed to the
super-list or to one or more of the sub-lists.
Note carefully that a REVIEW command sent for the super-list
will not recurse into the sub-lists pointed to by the super-list. If you
have a super-list called SUPER and you send a REVIEW SUPER
command, LISTSERV will respond with only the people who are subscribed directly
to SUPER.
Similarly, access to the super-list's notebook archives is not automatically
recursive. If you want sub-list subscribers to be able to access the archives of
the super-list (but don't want the sub-list subscribers to have to subscribe to
the super-list), then you must configure the Notebook= keyword for the
super-list so that it contains references to each of the sublists. For example,
say we have a super-list called SUPER and two sub-lists called SUB-A and SUB-B.
We want the subscribers of both SUB-A and SUB-B to be able to read the archives
of SUPER (since postings to SUPER won't be archived in SUB-A or SUB-B), but we
don't want people who aren't susbcribed to any of the three lists to be
able to access the archives. So we set
* Notebook= Yes,C:\LISTS\SUPER,Monthly,Private,(SUB-A),(SUB-B)
and anyone subscribed to the SUPER list or to the SUB-A or SUB-B lists can
access the SUPER archives.
If you have many sub-lists, you can specify multiple Notebook= lines, e.g.,
* Notebook= Yes,C:\LISTS\SUPER,Monthly,Private,(SUB-A),(SUB-B)
* Notebook= (SUB-C),(SUB-D),(SUB-E),(SUB-F)
LISTSERV will read these two (or more) Notebook= lines and concatenate the
values.
2.13.12. "Cloning" lists
Some sites may have a need for many lists that are essentially identical. For
instance, a series of class section lists for a university department may have
the same owner, allow the same class of users to subscribe, and so forth.
LISTSERV makes it possible to maintain large collections of lists by "including"
keywords from an external file.
For instance, consider a mathematics course with ten sections. Each section
should have its own list (for instance, called M101-001,
M101-002, and so forth), but the lists will otherwise be
identical. The LISTSERV maintainer simply creates a text file (in this case
called M101 KEYWORDS) containing the keyword definitions that
will be shared by the lists, as follows:
PUT M101 KEYWORDS PW=createpw
* Owner= mathwhiz@someuni.edu (Professor J. Random User)
* Owner= Quiet:
* Owner= gradasst@someuni.edu (Joe Doakes, Graduate Assistant)
* Notebook= Yes,/home/listserv/archives/m101,Monthly,Private
* Auto-Delete= No
* Errors-To= gradasst@someuni.edu
* Subscription= Closed
* Notify= Yes Confidential= Yes Validate= Yes,Confirm,NoPW
* Reply-to= List,Ignore Review= Owners Send= Private
* Default-Options= Repro
Next, the LISTSERV maintainer stores this file in the usual way, by first making
a filelist or catalog entry for it (as outlined in chapter 8) and then storing
it with a PUT operation. Generally the GET
and PUT FACs for this file should specify that the list
owner(s) should be able to retrieve and store it. The file must be stored
in LISTSERV's A directory (the same directory that contains the
*.LIST files).
Note that it is also possible to create this file directly in LISTSERV's A
directory with a text editor; if you do so, make sure that you do not include
the PUT command shown above. You should still make the filelist or catalog entry
for the file so that the list owners can retrieve and store it.
Next, the LISTSERV maintainer creates and stores a skeleton list header for each
of the section lists. The first section list (M101-001) is
illustrated below:
PUT M101-001 LIST PW=createpw
* Math 101 Section 001 Mailing List
* .IK M101
The .IK command tells LISTSERV that whenever it uses this
list, it should read the keyword definitions from the file M101
KEYWORDS (note carefully that the syntax is ".IK M101",
not ".IK M101 KEYWORDS"). Now, whenever the professor
in charge of the class wants to make a change to all of the M101 lists (for
instance, he has a new graduate assistant), he simply GETs the
file M101 KEYWORDS, makes the changes, and
PUTs the file back, instead of having to GET
separate headers for each list and make the changes to all of them
individually.
Note: On some servers the LISTSERV maintainer may have to stop and restart
LISTSERV (or do a GET+PUT of all of the list headers involved)
to make changes to the KEYWORDS file appear. This is because
LISTSERV may have the KEYWORDS file and/or the list headers
that use it cached at the time you modify it.
In order to see the complete list header, send a REVIEW
listname command. The response to a GET will
be only the skeleton header with the .IK command.
Special note: The sample KEYWORDS file above includes a
Notebook= keyword. This will cause the notelogs for all of the
lists that use this KEYWORDS file to be written in the same
directory, per the example, /home/listserv/archives/m101 .
This means that in that directory you would have notelogs for the
M101-001 list, the M101-002 list, and so
forth (depending of course on what lists use the example M101
KEYWORDS file). If this behavior is not desired, simply don't put a
Notebook= keyword in the KEYWORDS file, and
define it in the list header for the cloned list instead, either before or after
the .IK directive.
For the web archive interface, note carefully that if you do use the same
directory for all of the cloned lists' notelogs, the LISTSERV maintainer will
still have to make separate web archive directories for each list under your
WWW_ARCHIVE_DIR directory if you intend to serve the archives
via the web interface. In other words, the web interface doesn't care where you
keep a list's notelogs as long as it has a directory specified under
WWW_ARCHIVE_DIR for it to write the list's web archive indexes
into. So while all of your notelogs may go into
/home/listserv/archives/m101 , regardless of the name of the
cloned list, the LISTSERV maintainer still needs to make (for example)
/usr/local/etc/httpd/htfiles/archives/m101-001 and so forth in
order to serve the notelogs on the web.
In LISTSERV 1.8c and later, when creating the list, a random password is
assigned for security if the LISTSERV maintainer does not define one explicitly.
In 1.8c and later it is no longer necessary to use the list password in all but
one situation; it is simply another line of defense, and you can substitute a
personal password in any command that formerly called for a list password. See
section 2.9, above, to learn how to create a personal password.
The only situation in which a list password MUST be defined explicitly in a list
header is in the case of peered lists, where the PW= list
header keyword must be set to the same value on all peers.
LISTSERV 1.8d kits starting in May 2000 contain a new MIME
attachment-filtering feature which is configured by setting the new
Attachments= list header keyword. The new keyword allows three
distinct modes:
- Allow all MIME attachments, no filtering or blocking
- Reject MIME attachments with notice to the poster
- Filter MIME attachments out of messages transparently
In addition, you can configure specific MIME types to reject or filter
while allowing other types through (for instance, you can block executable
files but allow images or word processing files based on their MIME type).
For information on the various settings, please see the section on the
Attachments= keyword in Appendix B of this manual.
LISTSERV automatically produces a List of Lists that may be reviewed by users
anywhere on the Internet in one of two ways:
L-Soft's CataList service at
http://www.lsoft.com/CataList.html
The LISTS GLOBAL searchtext command. This list of lists
is made up of one-line entries containing the short listname and the descriptive
title of the list (up to about 60 characters in length). A sample of the List of
Lists format was shown in Chapter 2.
Note that it is possible to code a descriptive title in your list header that is
more than 40 columns long, but the List of Lists will include only the first 40
columns of that title. It is therefore important from this respect to be sure
that the descriptive title of your list is succinct and to the point.
L-Soft's CataList service
(http://www.lsoft.com/lists/CataList.html) allows users to
search the global list of public LISTSERV lists via the World Wide Web. Adding
an HTML description to a list is easy, and can do a lot to enhance the
appearance of a list in the database. All you have to do is update your list
header and add the text of your choice. Here is an example:
* The coffee lovers' list
*
* Review= Public Subscription= Open Send= Public
* Notify= Yes Reply-to= List,Respect
* Notebook= Yes,L,Monthly,Public
*
* Owner= claudia@espresso.xyz.it (Claudia Serafino)
*
* <HTML>
* COFFEE-LOVERS is an open list for, well, coffee lovers! Our
* motto is: <cite>"Instant -- just say no!"</cite>
* That's pretty much our whole charter, although there are a
* few other <a href="http://www.coffee.org/charter.html">
* rules</a> that you may want to read before joining. For
* instance, we don't allow flame wars about decaf: if you like it,
* well, it's your body after all.
*
* <p>The list is maintained by
* <a href="http://www.coffee.org/claudia.html">Claudia
* Serafino</a> (that's me!) and you will find all sorts of
* useful info about coffee on my home page.
* </HTML>
*
In other words, you just insert your HTML text in the list header and bracket it
with <HTML> and </HTML> tags
(these tags tell the web interface where the HTML text begins and ends -- they
are not actually sent to the web browser). There are three simple rules that you
must follow when inserting your HTML data:
- The <HTML> and </HTML> tags
must appear on a separate line, as shown in the example above. You cannot have
anything else on that line and, in particular, you cannot mix keyword
definitions with HTML data.
- The HTML data you are providing is embedded into the document shown by the
web interface when users query your list. Because you are given some space
between two horizontal rules on an existing page, rather than a whole new page.
you should not include tags that affect the whole document, like for instance
<TITLE>.
- While this procedure is compatible with all versions of LISTSERV, there are
a few restrictions on the placement of equal signs within your HTML text with
versions that do not have any specific support for the
<HTML> and </HTML> markers. In
practice, you can ignore this rule unless you get an error message while storing
your list.
When reformatting your list header description for HTML, bear in mind that the
text will not always be viewed using a web browser. It is best to keep the
formatting as clear as possible and minimize the usage of HTML tags, since there
are still many people without WWW access. For instance, do not hesitate to use
white space between paragraphs for clarity.
3.2.1. Update latency
Barring network outages, a list header update takes a maximum of 24h to be
reflected in the distributed LISTS database. Database updates are usually
scheduled to be broadcast at night, so the changes take place overnight. Once
the LISTS database has been updated, it can take a maximum of 24h for the frozen
copy of the database used by the web interface to be updated. In most cases,
both the LISTS database and its frozen copy on the web server will be updated
overnight. However, if the site hosting your lists is several time zones west of
the site hosting the web server, and if that server only updates itself once a
day, you may have to wait two days for your update to be reflected.
3.2.2. Inserting a pointer to another list
Sometimes it may be useful to link a number of related lists together so that
the viewer can quickly ex