Import ezmlm-idx 0.40
[ezmlm] / idx.patch
diff --git a/idx.patch b/idx.patch
new file mode 100644 (file)
index 0000000..7fd82fa
--- /dev/null
+++ b/idx.patch
@@ -0,0 +1,3038 @@
+--- ezmlm-warn.1       1998/02/17 00:32:45     1.1
++++ ezmlm-warn.1       1998/12/21 04:35:16     1.5
+@@ -3,6 +3,15 @@
+ ezmlm-warn \- send out bounce warnings
+ .SH SYNOPSIS
+ .B ezmlm-warn
++[
++.B \-dD
++][
++.B \-t
++.I timeout
++][
++.B \-l
++.I lockout
++]
+ .I dir
+ .SH DESCRIPTION
+ .B ezmlm-warn
+@@ -12,27 +21,91 @@
+ .B ezmlm-warn
+ scans
+-.I dir\fB/bounce
+-for bounce messages received by
+-.BR ezmlm-return .
+-If it sees a distribution bounce for
++.I dir\fB/bounce/d/
++for directories older than
++.I timeout
++days ago (see
++.BR \-t ).
++The directories are created by
++B ezmlm-return
++and contain bounces.
++If
++.B ezmlm-warn
++sees a distribution bounce for
+ .I box\fB@\fIdomain
+-received more than ten days ago,
++received more than
++.I timeout
++days ago,
+ it sends
+ .I box\fB@\fIdomain
+ a list of all the message numbers missed recently,
+ and deletes the bounce.
+ If it sees a warning bounce for
+ .I box\fB@\fIdomain
+-received more than ten days ago,
++received more than
++.I timeout
++days ago,
+ it sends
+ .I box\fB@\fIdomain
+ a probe,
+ and deletes the bounce.
+ .B ezmlm-warn
++uses
++.I dir\fB/bounce/lastd
++to keep track of when it was last run. If insufficient time has
++passed (see
++.BR \-l )
++.B ezmlm-warn
++exits without further action.
++
++.B ezmlm-warn
++keeps files with the bounced message numbers in
++.IR dir\fB/bounce/h .
++Expired files are removed and
++.I dir\fB/bounce/lasth
++keeps track of the last subdirectory scanned.
++
++.B ezmlm-warn
+ will not send a warning or probe to an address that is
+ not currently a subscriber.
++.SH OPTIONS
++.TP
++.B \-d
++process bounces for the digest list, rather than for the main list.
++Digest list bounces are stored in
++.I dir\fB/digest/bounce/
++rather than in
++.IR dir\fB/bounce/ .
++.TP
++.B \-D
++(Default.)
++Process bounces for the main list.
++.TP
++.B \-l \fIlockout
++.B ezmlm-warn
++will abort execution if it was run less than
++.I lockout
++seconds ago. The default is
++.I timeout /
++50, which with the default
++.I timeout
++is 20,000 seconds (approx. 5.6 hours). There is no reason to use this
++switch, except for testing and possibly in combination with
++.BR \-t.
++.TP
++.B \-t \fItimeout
++Bounces received more than
++.I timeout
++days ago are processed. This overrides the default of 1,000,000
++seconds (approximately 10 days)
++and may possibly be useful for very large busy lists. Also, a
++.I timeout
++of zero can be used to send a warning to all addresses for which
++a bounce has been received and a probe for all addresses for which a
++warning has bounces.
++This is useful to rapidly clear
++out bouncing addresses from a (low quality) address list.
+ .SH "SEE ALSO"
+ ezmlm-make(1),
+ ezmlm-return(1),
+--- ezmlm-return.1     1998/02/17 00:33:15     1.1
++++ ezmlm-return.1     1999/08/19 03:57:54     1.6
+@@ -3,12 +3,16 @@
+ ezmlm-return \- handle mailing list bounces
+ .SH SYNOPSIS
+ .B ezmlm-return
++[
++.B \-dD
++]
+ .I dir
+ .SH DESCRIPTION
+ .B ezmlm-return
+ handles bounces for the mailing list
+ stored in
+-.IR dir .
++.I dir
++and, if it exists, the associated digest list.
+ .B ezmlm-return
+ is normally invoked from a
+@@ -21,6 +25,30 @@
+ and
+ .BR HOST
+ environment variables.
++
++.B ezmlm-return
++exits 99, not 0, upon success.
++.SH OPTIONS
++.TP
++.B \-d
++.B ezmlm-return
++will assume the bounce is for a digest list.
++Normally,
++.B ezmlm-return
++will autodetect this from the bounce address. Autodetection makes
++.B ezmlm-return
++less flexible and will be removed in future versions.
++.TP
++.B \-D
++.B ezmlm-return
++will assume that the bounce is for a normal (non-digest) list.
++Normally,
++.B ezmlm-return
++will autodetect this from the bounce address. Autodetection makes
++.B ezmlm-return
++less flexible and will be removed in future versions.
++.B \-D
++will become the default.
+ .SH ADDRESSES
+ .B ezmlm-return
+ handles mail sent to any of the following addresses:
+@@ -59,6 +87,21 @@
+ will remove
+ .I box\fB@\fIdomain
+ from the mailing list.
++.TP
++.I local\fB\-return\-receipt\-\fIcookie\-fImsg\-
++A receipt from the list. This is logged. For SQL supporting lists,
++.I cookie
++is verified and receipt logged only if the cookie is correct. The arrival
++of the receipt shows that qmail at the sending host is running.
++
++For all the above addresses if,
++.I local
++is followed by
++.IR \-digest ,
++bounces are assumed to be from the digest list, and are stored in
++.I dir\fB/digest/bounce
++rather than in
++.I dir \fB/bounce .
+ .SH "SEE ALSO"
+ ezmlm-manage(1),
+ ezmlm-make(1),
+--- ezmlm-send.1       1997/07/23 18:55:45     1.1
++++ ezmlm-send.1       1999/08/19 03:13:36     1.27
+@@ -3,6 +3,11 @@
+ ezmlm-send \- distribute a message to a mailing list
+ .SH SYNOPSIS
+ .B ezmlm-send
++[
++.B \-cCrRvV
++] [
++.B \-h\fI header
++]
+ .I dir
+ .SH DESCRIPTION
+ .B ezmlm-send
+@@ -14,9 +19,34 @@
+ exists,
+ .B ezmlm-send
+ records a copy of the message in the
+-.I dir\fB/archive
++.I dir\fB/archive/
+ directory.
++If
++.I dir\fB/indexed
++exists,
++.B ezmlm-send
++adds the subject, author and time stamp of the message to the index, kept with
++the message in a subdirectory of
++.IR dir\fB/archive/ .
++The subject is processed to make reply-subject entries identical to
++original
++message subject entries.
++The subject index is used for the archive retrieval functions of
++.BR ezmlm-get(1) .  
++Use
++.B ezmlm-idx(1)
++to create a subject index from a preexisting archive.
++
++Subject and author lines are decoded if they are encoded per rfc2047. When
++split lines are unfolded, the number of escape sequences for
++iso-2022-* character sets is minimized. For instance, two
++consequtive toascii sequences are reduced.
++This processing is done for the character set specified in
++.IR dir\fB/charset .
++The result of this process is the same for a given subject, irrespective
++of encoding.
++
+ At the beginning of the message,
+ .B ezmlm-send
+ prints a new
+@@ -27,10 +57,24 @@
+ .B Mailing-List
+ field.
++If
++.I dir\fB/listid
++exists,
++.B ezmlm-send
++will assume that the format is correct and
++create a ``List-ID:'' header by placing the contents after the
++text ``List-ID: ''. 
++
++Next,
++.B ezmlm-send
++prints all the new fields listed in
++.IR dir\fB/headeradd .
++Any tags, ``<#h#>'', ``<#l#>'', or ``<#n#>'' found in these headers
++are replaced by the list host name, list local name, and message number,
++respectively.
++
+ .B ezmlm-send
+-then prints all the new fields listed in
+-.IR dir\fB/headeradd ,
+-followed by an appropriate
++then prints an appropriate
+ .B Delivered-To
+ line.
+@@ -39,6 +83,63 @@
+ .IR dir\fB/headerremove .
+ .B ezmlm-send
++removes MIME parts specified in
++.I dir\fB/mimeremove
++before archiving and distribution of the message.
++
++If
++.I dir\fB/text/trailer
++exists,
++.B ezmlm-send
++adds the trailer to simple text/plain messages in the same encoding as used for
++the the message. However, if the encoding is ``base64'' it is not safe
++to do this and the header is suppressed.
++For composite MIME messages, the trailer is added as a separate
++part, with the character set and encoding specified in
++.IR dir\fB/charset .
++The trailer is not added to multipart/alternative messages.
++Any tags, ``<#h#>'', ``<#l#>'', or ``<#n#>'' found in
++.I dir\fB/text/trailer
++are replaced by the list host name, list local name, and message number,
++respectively.
++
++If
++.I dir\fB/prefix
++exists,
++.B ezmlm-send
++will prefix the subject line with the first line of this
++file. A space will be added to separate
++.B prefix
++from the subject text.
++.B prefix
++is ignored for sublists. If
++.I dir\fB/prefix
++contains a ``#'', the last ``#'' will be replaced by the message number.
++Any prefix starting with text of a
++reply indicator (``Re:'', ``Re[n]:'', etc) will cause problems.
++The prefix may be
++rfc2047 encoded. Rfc2047 Iso-2022-* encoded prefixes
++.I must
++end in ascii.
++
++The prefix feature and especially the message number feature
++modify the message in violation
++with Internet mail standards. The features have been implemented by popular
++demand. Use at your own peril.
++
++.I dir\fB/sequence
++is ignored as of ezmlm-idx-0.32. Use
++.I dir\fB/headeradd
++with substitution to achieve the same goal.
++
++If
++.I dir\fB/qmqpservers
++exists,
++.B ezmlm-send will use
++.B qmail-qmqp(1)
++to send messages.
++
++.B ezmlm-send
+ does not distribute bounce messages:
+ if the environment variable
+ .B SENDER
+@@ -46,6 +147,60 @@
+ .BR #@[] ,
+ .B ezmlm-send
+ rejects the message.
++.SH OPTIONS
++.TP
++.B \-c
++No longer supported. Ignored for backwards compatibility.
++.TP
++.B \-C
++No longer supported. Ignored for backwards compatibility.
++.B ezmlm-send
++has to parse the subscriber database.
++.TP
++.B \-h\fI header
++If the list is a sublist, i.e.
++.I dir\fB/sublist
++exists,
++.I header
++is required in all messages to the list. This option is used
++when ezmlm is used to run a sublist of a lists run by a different
++mailing list
++manager that uses
++.I header
++rather than ``Mailing-List'' to identify messages from the list.
++Anything after the first colon (if present) in
++.I header
++is ignored.
++.TP
++.B \-r
++Copy incoming ``Received:'' headers to the outgoing message.
++.TP
++.B \-R
++(Default.)
++Do not copy incoming ``Received:'' headers, except the one added by
++the (last) listhost, to the outgoing message.
++In some
++cases, especially for sublists,
++the messages can have a large number of ``Received:''
++headers. This may lead to bounces for some users due to
++sendmail ``hopcounts'' set too low somewhere in the mail path. These users can
++subscribe and receive warning and probe messages, but no list messages, unless
++the number of ``Received:'' headers is reduced.
++
++Pre-list ``Received:'' headers are of little interest to normal list
++subscribers. ``Received:'' headers are
++still copied to the archive and available
++to anyone from there for message tracking purposes.
++.TP
++.B \-v
++Display
++.B ezmlm-send
++version information.
++.TP
++.B \-V
++Display
++.B ezmlm-send
++version information.
+ .SH "SUBLISTS"
+ If
+ .I dir\fB/sublist
+@@ -77,10 +232,71 @@
+ does not add its own
+ .B Mailing-List
+ field.
++
++Fourth,
++.B ezmlm-send
++uses the incoming message number for the outgoing message, if the list
++is not archived and the incoming SENDER has the correct format.
++This allows you to refer bounce warning recipients to the main list for
++archive retrieval of the missed messages. If the sublist archives
++message, it is assumed that missed messages will be retrieved from the sublist
++archive.
++
++The list
++still increments
++.I dir\fB/num
++for each message. If the sublist is archived, use of incoming message number
++for archive storage would be a security risk. In this case, the local sublist
++message number is used.
++.SH "OPTION USAGE"
++In general, the use of a prefix is discouraged. It wastes subject line space,
++creates trouble when MUAs add non-standard reply indicators. However, many
++users expect it not because it is useful, but because they are used to it.
++
++The
++.B \-C
++switch prevents posts from being set to SENDER. Rather than just copying
++out subscriber address files,
++.B ezmlm-send
++has to parse them to look for SENDER. This makes it less efficient. Also,
++it is useful for the SENDER to see the post to know that it has made it
++to the list, and it's context to other subscribers, i.e. where it came
++within the traffic of messages on the list.
++
++Avoiding SENDER as a recipient is useful in small lists, such as small
++teams with varying members, where ezmlm serves mainly as an efficient tool
++to keep the team connected without administrator intervention. Here the
++overhead of subscriber list parsing is negligible.
++.SH "CHARACTER SETS"
++If the list is indexed,
++.B ezmlm-send
++will keep a message index. rfc2047-encoded subject and from lines will be
++decoded.
++If
++.I dir\fB/charset
++exists,
++.B ezmlm-send
++will eliminate redundant escape sequences from the headers according to
++the character set specified in this file.
++Only character sets using escape sequences need this support. Currently,
++supported are iso-2022-jp*, iso-2022-kr, and iso-2022-cn*. Only iso-2022-jp
++has been tested extensively.
++
++The character set can be suffixed
++by ``:'' followed by a code. Recognized codes are ``Q'' 
++for ``Quoted-Printable'', and ``B'' for ``base64''.
++
++For
++.BR ezmlm-send ,
++this affects the format of the trailer, if a trailer is specified and if the
++message is a multipart mime message
+ .SH "SEE ALSO"
++ezmlm-get(1),
++ezmlm-idx(1),
+ ezmlm-manage(1),
+ ezmlm-make(1),
+ ezmlm-sub(1),
+ ezmlm-unsub(1),
+ ezmlm-reject(1),
+-ezmlm(5)
++ezmlm(5),
++qmail-qmqp(1)
+--- ezmlm-sub.1        1998/12/06 16:48:14     1.1
++++ ezmlm-sub.1        1999/08/19 03:22:14     1.5
+@@ -3,9 +3,20 @@
+ ezmlm-sub \- manually add addresses to a mailing list
+ .SH SYNOPSIS
+ .B ezmlm-sub
++[
++.B \-HmMnNsSvV
++][
++.B \-h
++.I hash
++]
++.B 
+ .I dir
+ [
+-.I box\fB@\fIdomain ...
++.I box\fB@\fIdomain 
++[
++.I name
++]
++.I ...
+ ]
+ .SH DESCRIPTION
+ .B ezmlm-sub
+@@ -13,12 +24,20 @@
+ .I box\fB@\fIdomain
+ to the mailing list stored in
+ .IR dir .
++.I name
++is added as a comment to the subscription log, if the
++.B \-n
++switch is used.
++
++If no argument is given on the command line,
++.B ezmlm-sub
++processes stdin.
+ If
+ .I box\fB@\fIdomain
+ is already on the mailing list,
+ .B ezmlm-sub
+-leaves it there.
++leaves it there and does not modify the subscription log.
+ .B ezmlm-sub
+ converts
+@@ -28,11 +47,61 @@
+ to the mailing list.
+ .I box\fB@\fIdomain
+-cannot be longer than 400 characters.
++cannot be longer than 400 characters (255 characters with mysql support).
++.SH "GENERAL OPTIONS"
++.TP
++.B \-n
++Assume arguments are pairs of
++.I box\fB@\fIdomain
++and
++.IR name
++(or other subscriber info)
++rather than addresses alone.
++.B ezmlm-sub(1)
++will add the first argument in each pair to the subscriber list. If it is
++a new address,
++.I name
++will be added to the subscription log.
++.TP
++.B \-N
++(Default.)
++Arguments are all addresses of the type
++.IR box\fB@\fIdomain .
++.TP
++.B \-v
++Display
++.B ezmlm-sub(1)
++version information.
++.TP
++.B \-V
++Display
++.B ezmlm-sub(1)
++version information.
++.SH "MYSQL OPTIONS"
++These option is silently ignored in the absence of mysql support.
++.TP
++.B \-h \fIhash
++With mysql support the argument is used as the hash. The argument should
++be between 1 and 99. The hash is used in
++in the distribution of addresses between sublists. As the hash is normally
++between 0 and 52, controlling the hash makes it possible to add addresses
++that cannot be manipulated remotely.
++.TP
++.B \-m
++(Default.)
++Use SQL support if available.
++.TP
++.B \-M
++Do not use SQL support even if available. This option can be used to build
++a normal local subscriber database even for lists with SQL support. Use
++in combination with
++.B ezmlm-list(1)
++to convert an SQL address db to a ezmlm standard address database.
+ .SH "SEE ALSO"
+ ezmlm-list(1),
+ ezmlm-manage(1),
+ ezmlm-make(1),
++ezmlm-receipt(1),
+ ezmlm-send(1),
+ ezmlm-unsub(1),
+ ezmlm(5)
+--- ezmlm-unsub.1      1998/12/06 16:48:14     1.1
++++ ezmlm-unsub.1      1999/08/19 03:22:14     1.5
+@@ -3,6 +3,11 @@
+ ezmlm-unsub \- manually remove addresses from a mailing list
+ .SH SYNOPSIS
+ .B ezmlm-unsub
++[
++.B \-mMHvV
++] [
++.B \-h\fBhash
++]
+ .I dir
+ [
+ .I box\fB@\fIdomain ...
+@@ -14,6 +19,10 @@
+ from the mailing list stored in
+ .IR dir .
++If no command line argument is given,
++.B ezmlm-unsub
++will process stdin instead.
++
+ If
+ .I box\fB@\fIdomain
+ is not on the mailing list,
+@@ -26,10 +35,46 @@
+ to lowercase before removing
+ .I box\fB@\fIdomain
+ from the mailing list.
++.SH "GENERAL OPTIONS"
++.TP
++.B \-v
++Display
++.B ezmlm-unsub(1)
++version information.
++.TP
++.B \-V
++Display
++.B ezmlm-unsub(1)
++version information.
++.SH "MYSQL OPTIONS"
++These option is silently ignored in the absence of mysql support.
++.TP
++.B \-h \fIhash
++With mysql support the argument is used as the hash. The argument should
++be between 1 and 99. The hash is used in
++in the distribution of addresses between sublists. As the hash is normally
++between 0 and 52, controlling the hash makes it possible to remove addresses
++that cannot be manipulated remotely. A hash of 99 is reserved for sublists,
++and a hash of 98 is reserved for ``receipt'' addresses serviced by
++.B ezmlm-receipt(1).
++.TP
++.B \-H
++(Default.)
++The address can be removed if it has a hash in the normal range (0..52).
++.TP
++.B \-m
++(Default.)
++Use SQL support if available.
++.TP
++.B \-M
++Do not use SQL support even if available.
++This option can be used to manipulate
++a normal local subscriber database even for lists with SQL support.
+ .SH "SEE ALSO"
+ ezmlm-list(1),
+ ezmlm-manage(1),
+ ezmlm-make(1),
++ezmlm-receipt(1),
+ ezmlm-send(1),
+ ezmlm-sub(1),
+ ezmlm(5)
+--- ezmlm-list.1       1998/12/06 16:48:14     1.1
++++ ezmlm-list.1       1999/08/19 03:40:27     1.5
+@@ -3,6 +3,11 @@
+ ezmlm-list \- show the addresses on a mailing list
+ .SH SYNOPSIS
+ .B ezmlm-list
++[
++.B \-n\fI msgnum
++] [
++.B \-aAmMnNvV
++]
+ .I dir
+ .SH DESCRIPTION
+ .B ezmlm-list
+@@ -16,6 +21,40 @@
+ of a possibly malicious remote user.
+ .B ezmlm-list
+ does not strip control characters.
++.SH "GENERAL OPTIONS"
++.TP
++.B \-m
++(Default.)
++Use SQL support if available.
++.TP
++.B \-M
++Do not use SQL support even if available.
++This option can be used to manipulate
++a normal local subscriber database even for lists with SQL support.
++.TP
++.B \-n
++Print only the number of subscribers.
++.TP
++.B \-N
++(Default.)
++List subscriber addresses, one per line.
++.TP
++.B \-v
++Display
++.B ezmlm-list(1)
++version information.
++.TP
++.B \-V
++Display
++.B ezmlm-list(1)
++version information.
++.SH "SEE ALSO"
++ezmlm-list(1),
++ezmlm-manage(1),
++ezmlm-make(1),
++ezmlm-send(1),
++ezmlm-sub(1),
++ezmlm(5)
+ .SH "SEE ALSO"
+ ezmlm-sub(1),
+ ezmlm-unsub(1),
+--- ezmlm.5    1997/07/13 22:01:50     1.1
++++ ezmlm.5    1999/05/12 22:41:46     1.24
+@@ -21,7 +21,60 @@
+ handles administrative requests automatically;
+ .B ezmlm-send
+ sends a message to all subscribers listed in
+-.IR dir .
++.I dir
++and also maintains a message archive and message subject index if the list
++is configured to do so.
++.B ezmlm-reject
++rejects messages that have an empty subject, or a subject consisting of
++only a command word;
++.B ezmlm-return
++handles bounces;
++.B ezmlm-warn
++warns users for which messages bounce and eventually removes them from
++the subscriber list.
++.B ezmlm-idx
++can create a subject index from an existing list archive.
++.B ezmlm-get
++manages message, index, and thread retrieval from the archive, as well
++as the generation of message digests;
++.B ezmlm-cron
++provides a restricted interface to cron for the generation of
++digest generation trigger messages;
++.B ezmlm-store
++queues messages of moderated lists and sends a moderation request to
++the moderator(s);
++.B ezmlm-moderate
++processes moderation requests to accept the queued message to the list
++via
++.B ezmlm-send,
++or to return the message to the sender;
++.B ezmlm-clean
++cleans up the moderation queue and returns to the sender
++any messages that have timed-out;
++.B ezmlm-gate
++posts messages that come from a SENDER in an address database, and sends
++remaining messages out for moderation;
++.B ezmlm-check
++is used to diagnose problems with ezmlm mailing list configuration;
++.B ezmlm-issub
++and
++.B ezmlm-issubn
++determine if a SENDER is a subscriber or a member of a
++collection of addresses;
++.B ezmlm-tstdig
++determines if it is time to create a new digest based on the number and
++volume of messages and the amount of time that has passed since the last
++digest was issued;
++.B ezmlm-request
++can be used to answer
++.B ezmlm
++commands in the subject line easing migration from other mailing list
++managers. It can also function as a global interface mimicking
++the interface of other mailing list manager.
++.B ezmlm-glmake
++can set up the global interface, and
++.B ezmlm-glconf
++can create a configuration file for the global interface from your lists.
+ .SH SUBSCRIBERS
+ .I dir\fB/subscribers
+ is a directory containing the subscriber list.
+@@ -69,12 +122,19 @@
+ .B ezmlm-send
+ archives all new messages if
+ .I dir\fB/archived
+-exists.
++exists. If
++.I dir\fB/indexed
++exists,
++.B ezmlm-send
++also maintains a message subject and author index.
+ Messages sent to the mailing list are numbered from 1 upwards,
+ whether or not they are archived.
+ .I dir\fB/num
+-is the number of messages sent so far.
++is the number of messages sent so far followed by ':', followed by the
++cumulative amount of message body that has passed
++.B ezmlm-send
++stored as kbytes * 4 (4 corresponds to 1kb).
+ .I dir\fB/archive
+ has subdirectories,
+@@ -83,11 +143,43 @@
+ .IR dir\fB/archive/\fIm\fB/\fIn .
+ For example, message number 15307 is stored in
+ .IR dir\fB/archive/153/07 .
++The message index is stored in the file
++.B index
++in the same subdirectory of
++.I dir\fB/archive
++holding the corresponding messages.
++Thus, the subject index contains up to 100 entries.
++
++The subject index contains message subjects that are normalized so that
++the original message and all replies have the same entry. The subject index
++is used for advanced message retrieval functions. For safety, the subject
++index is created under a temporary name
++inside
++.I dir\fB/archive
++and then moved into place.
+ .B ezmlm-manage
+ will ignore message files without the owner-execute bit set.
+ .B ezmlm-send
+ turns on the owner-execute bit after safely writing the message to disk.
++
++.B ezmlm-make
++by default adds
++.B ezmlm-get
++to
++.I dir\fB/manager
++to handle 
++.I \-get, \-index,
++and
++.I \-thread
++requests. If
++.B ezmlm-make
++is invoked with a 
++.I digcode
++command line argument, digest creation
++is enabled by putting this argument on the
++.B ezmlm-get
++command line.
+ .SH BOUNCES
+ .I dir\fB/bounce
+ is a directory containing bounce messages.
+@@ -127,9 +219,10 @@
+ sets up
+ .I dir\fB/bouncer
+ to invoke
+-.B ezmlm-return
+-and then
+-.BR ezmlm-warn .
++.BR ezmlm-return .
++.B ezmlm-warn
++is no longer invoked here due to the load it places on systems with many
++large lists with many bounces.
+ .I dir\fB/manager
+ handles incoming administrative requests.
+@@ -137,9 +230,266 @@
+ sets up
+ .I dir\fB/manager
+ to invoke
+-.B ezmlm-manage
++.BR ezmlm-get ,
++.BR ezmlm-manage ,
+ and then
+ .BR ezmlm-warn .
++
++.I dir\fB/moderator
++handles incoming message
++.I accept
++and
++.I reject
++requests for moderated lists.
++.B ezmlm-make
++sets up
++.I dir\fB/moderator
++to invoke
++.BR ezmlm-moderate ,
++and .BR ezmlm-clean .
++.SH DIGESTS
++.B ezmlm-get
++can create digests if it is invoked from the command line, from
++.IR dir\fB/editor ,
++or from
++.IR dir\fB/manager .
++The program functions in slightly different ways in these 3 settings (see
++.BR ezmlm-get(1) ).
++
++To enable automatic digests for a mailing list, use the
++.B ezmlm-make \-d
++switch. To also enable the generation of digests at specific times dictated
++by mailed trigger messages, a
++.I digcode
++should be specified on the
++.B ezmlm-get
++command line.
++This can be done by specifying
++.I digcode
++as a fifth argument to
++.B ezmlm-make
++when setting up the list.
++.I digcode
++must be alphanumeric and is case-insensitive.
++
++To generate trigger messages, use
++.B ezmlm-cron(1)
++as an interface to
++.B crond(8)
++or use
++.B crond
++directly.
++
++.I dir\fB/num
++contains the number of the last message processed, followed by ':' and a
++number that is increased by 1 for each 256 bytes of message body text
++processed. The latter number is used by
++.B ezmlm-tstdig
++to determine if a new digest is due.
++
++.I dir\fB/dignum
++contains the contents of
++.I dir\fB/num
++at the time of the last regular digest creation, followed by a ':',
++followed by a timestamp.
++It is updated after each regular digest is sent.
++
++.I dir\fB/digissue
++contains the issue number of the last regular digest. It is incremented
++for each regular digest sent.
++
++The following user crontab entry (all on one line)
++generates a digest of the list
++.I list@host.domain
++at 1600 every day:
++
++.EX
++  00 16 * * * /var/qmail/bin/qmail-inject list-dig.digcode
++.EE
++
++Alternatively,
++.B ezmlm-cron
++can be used:
++
++.EX
++  % ezmlm-cron -t 16:00 list@host digcode
++.EE
++
++.B ezmlm-get
++can also be run from the shell: To generate a digest to
++.I list-digest@host
++from the list housed in
++.IR ~joe/list :
++
++.EX
++  % ezmlm-get ~joe/list
++.EE
++
++Like other
++.B ezmlm-get
++replies, digest can be sent in several formats. See
++.B ezmlm-get(1)
++for more info.
++.SH MODERATION
++There are three aspects of moderation: moderation of posts, moderation
++of subscriptions, and "remote administration", i.e. giving the
++moderator the right to (un)subscribe any user.
++.B ezmlm
++handles these three aspects separately. The two first aspects enhance
++security, while the third decreases security, but makes list administration
++considerably easier. By default, the moderator database is the same for all
++three functions. While "remote administration" and subscription moderation
++always use the same database, the moderators for message moderation can
++be different.
++
++Even with subscription moderation, the user has to verify the request. This
++is to ensure that the user initiating the request really controls the address.
++.B ezmlm-manage
++options exist to disable the user handshake, which may be useful in some
++circumstances.
++
++For moderation options, the moderators are by stored in a subscriber
++list in
++.IR moddir\fB/subscribers .
++By default
++.I moddir
++is
++.IR dir\fB/mod .
++
++Moderators can be added and removed with:
++
++.EX
++.B ezmlm-sub
++.I moddir
++.I moderator@host
++.EE
++
++.EX
++.B ezmlm-unsub
++.I moddir
++.I moderator@host
++.EE
++
++For subscription moderation, touch
++.IR dir\fB/modsub
++after adding moderator(s).
++For remote administration, touch
++.IR dir\fB/remote .
++If the contents of these files start with a leading forward slash, it is 
++assumed to be the name of
++.B moddir
++subscription
++moderation. If both files exist and start with a forward slash, the
++.I dir\fB/remote
++contents are ignored. Moderators are stored in a subscriber list in the
++.B subscribers
++subdirectory of
++.BR moddir .
++If no directory names are specified,
++the default,
++.IR dir\fB/mod ,
++is used.
++In all cases, the
++.I subscribers
++subdirectory of the base directory must exists/be created.
++
++Moderation of messages is achieved by
++creating
++.I dir\fB/modpost
++and  modifying
++.IR dir\fB/editor
++to invoke
++.B ezmlm-store.
++.B ezmlm-store
++stores the message in
++.IR dir\fB/mod/pending
++and sends a moderation request to all moderators stored in
++.IR moddir .
++
++If
++.I dir\fB/modpost
++does not exist,
++.B ezmlm-store
++posts messages directly, and
++.B ezmlm-clean
++does nothing.
++
++If
++.I dir\fB/modpost
++contains a directory name starting with a forward slash,
++this directory is used as
++.I moddir
++for message moderation.
++Moderators are stored in a subscriber list in the
++.I subscribers
++subdirectory of
++.IR moddir .
++If no directory names are specified,
++the default,
++.IR dir\fB/mod ,
++is used.
++
++.IR dir\fB/moderator
++is linked to
++.IR dot\fB\-accept-default
++and
++.IR dot\fB\-reject-default .
++It handles replies from the moderators.
++
++In addition to a moderator list, the directories
++.IR dir\fB/mod/pending ,
++.IR dir\fB/mod/accepted ,
++and
++.IR dir\fB/mod/rejected
++must exist. These directories contain the message moderation queue.
++
++If
++.IR dir\fB/mod/modtime
++it determines the minimal time in hours that messages wait in the moderation
++queue, before they are returned to sender with the message in
++.IR dir\fB/text/mod-timeout .
++
++If a
++.I \-help
++command is send for a moderator and
++.IR dir\fB/modsub
++or
++.IR dir\fB/remote
++exist, a more detailed help message stored in
++.I dir\fB/text/mod-help
++will be sent together with the regular help. This text should not contain
++secrets.
++If
++.I dir\fB/text/mod-help
++does not exist,
++.I dir\fB/text/help
++will be sent.
++
++If a
++.I \-list
++command is sent for a moderator and
++.IR dir\fB/modsub
++or
++.IR dir\fB/remote
++exist, and the
++.B ezmlm-manage \-l
++command line switch is specified, a subscriber list will be returned.
++
++If an
++.I \-edit.file
++command is sent for a moderator and
++.IR dir\fB/remote
++exist, and the
++.B ezmlm-manage \-d
++command line switch is specified,
++.B text\fB/file
++is returned together with an
++.B ezmlm
++cookie. The remote administrator may return an edited version of the
++file, which will be stored, provided that the cookie is valid.
++See
++.B ezmlm-manage(1)
++for more info.
+ .SH TEXT
+ .I dir\fB/text
+ is a directory
+@@ -187,6 +537,27 @@
+ .B get-bad
+ Rejecting a bad archive retrieval request.
+ .TP
++.B digest
++Text copied into the
++.I Administrativia
++section of the digest. Usually, this will contain subscription info
++for the digest, as well as information on how to post to the list.
++.TP
++.B trailer
++If this files exists, it is copied to the end of all messages to the list.
++.TP
++.B faq
++Sent in response to the
++.I faq
++command. Usually contains frequently asked questions and answers specific
++for the mailing list.
++.TP
++.B info
++Sent in response to the
++.I info
++command. Usually contains a descripition, policy, etc, for the list. The
++first line should in itself be a very brief description of the list.
++.TP
+ .B bounce-warn
+ Pointing out that messages have bounced.
+ .TP
+@@ -198,9 +569,96 @@
+ .B ezmlm-return
+ has kept a list of bounced message numbers.
+ .TP
++.B dig-bounce-num
++Explaining that digest messages have bounced. All other text files are used
++for both the main list and the digest list.
++.TP
+ .B bounce-bottom
+ Separating the bounce message.
++.TP
++.B mod-help
++is set to list moderators issuing a
++.I \-help
++command. It contains instructions for moderators, but it is relatively
++trivial for a non-moderator to read it. Don't put secrets here.
++.TP
++.B mod-reject
++is the returned to the sender of a rejected post.
++.TP
++.B mod-timeout
++is returned if the message timed-out without moderator action.
++.TP
++.B mod-sub
++is added to the text confirming subscription and unsubscription
++instead of
++.B bottom
++and the requesting message, for actions that were approved
++by a moderator. Not copying the requesting message
++hides the moderator identity
++from the subscriber.
++.TP
++.B mod-request
++is the text sent to the moderators to request moderator action on
++a posted message.
++.TP
++.B mod-unsub-confirm
++Requesting that the moderator confirm a request to subscribe.
++If this file does not exist,
++.B sub-confirm
++will be used.
++.TP
++.B mod-unsub-confirm
++Requesting that the moderator confirm a request to unsubscribe.
++If this file does not exist,
++.B unsub-confirm
++will be used.
++.TP
++.B edit-do
++Instructions sent to the remote administrator together with a copy
++of a
++.I dir\fB/text
++file and editing instructions.
++.TP
++.B edit-list
++A list of editable files in
++.I dir\fB/text
++with a one-line description send to a remote administrator in response to a
++.I -edit
++command.
++.TP
++.B edit-done
++Sent to the remote administrator after an edited
++.I dir\fB/text
++file has been successfully saved.
++.PP
++Several tags in the text files are replaced by ezmlm programs.
++All programs replace the tag
++.B <#l#>
++with the name of the list or the list-digest, as appropriate for the request,
++and
++.B <#h#>
++with the hostname for the list.
++.B ezmlm-send
++and
++.B ezmlm-get
++replace
++.B <#n#>
++with the current message number in added headers from
++.I dir\fB/headeradd
++and text files.
++.B ezmlm-get
++does this for digest messages, where the current message is the number of
++the first message in the digest.
++.B ezmlm-manage
++replaces the tag
++.B <#A#>
++anywhere on a line with the subscription address, and
++.B <#R#>
++anywhere on a line
++with the address the subscriber must reply to. Only the first tag on any
++line is processed.
+ .PP
++For backwards compatibility,
+ .B ezmlm-manage
+ replaces the line
+ .B !A
+@@ -213,6 +671,23 @@
+ and
+ .B unsub-confirm
+ with the address that the subscriber must reply to.
++.PP
++.B ezmlm-store
++replaces the tag
++.B <#A#>
++anywhere on a line with the address for accepting the message, and
++.B <#R#>
++anywhere on a line
++with the address for rejecting the message.
++Only the first tag on any line is processed.
++.PP
++For backwards compatibility,
++.B ezmlm-store
++also replaces the line
++.B !A
++with the address for accepting the message and the line
++.B !R
++with the address for rejecting the message.
+ .SH "OUTGOING MESSAGE EDITING"
+ .I dir\fB/headerremove
+ is a list of bad header field names,
+@@ -233,10 +708,61 @@
+ is a list of new header fields.
+ .B ezmlm-send
+ adds these fields to every outgoing message.
+-.B ezmlm-make
++.B ezmlm-send
+ sets up
+ .I dir\fB/headeradd
+-with no new fields.
++to add
++.B X-No-Archive: yes
++and
++.BR Precedence: bulk .
++
++If
++.I dir\fB/mimeremove
++exists,
++.B ezmlm-send
++removed parts with the corresponding content-types from composite MIME
++messages. If the
++.B ezmlm-reject
++.I dir
++argument is specified,
++simple MIME messages of these content-types are rejected.
++
++If
++.I dir\fB/mimereject
++exists, and the
++.B ezmlm-reject
++.I dir
++argument is specified,
++simple MIME messages of these content-types, or
++composite MIME messages with any body part of these content-types are rejected.
++
++If
++.I dir\fB/sequence
++exists, the first line is added as a header to all outgoing messages, followed
++by a space and the message number. The message number is useful for archive
++retrievals, since some mail systems do not reveal the return-path to the user.
++.B NOTE:
++Sublists have their own message counter. Adding a sequence header from a
++sublists will give you the sublist message number which is different from
++the main list message number.
++
++.I dir\fB/prefix
++is a subject prefix. If this file exists, its contents are prefixed to the
++subject of the post in the outgoing message. The archived message is not
++processed. Attempts are made to not duplicate an existing prefix in replies.
++Think twice before using this option.
++A prefix takes unnecessary space on the subject line and most mail clients
++can easily filter on other headers, such as 'Mailing-List:'. If
++.I dir\fB/prefix contains a single '#', this will be replaced by the message
++number. The use of this feature is inadvisable and violates internet mail
++standards. However, it is very popular in e.g. Japan. If you must use this
++feature, make sure you are aware that you may be causing problems to users,
++sublists, etc.
++
++.I dir\fB/text/trailer
++is a message trailer. If this file exists, it's contents are copied to the 
++end of outgoing messages. Only lines terminated with new-line are copied.
++No trailer is copied to the archived version of the message.
+ .SH MISCELLANY
+ The first line of
+ .I dir\fB/mailinglist
+@@ -248,6 +774,27 @@
+ .IR dir\fB/mailinglist ,
+ in every outgoing message.
++If
++.I dir\fB/listid
++exists,
++ezmlm programs create a new
++.B List-ID
++field, showing the contents of the first line of
++.IR dir\fB/listid ,
++in every outgoing message. The list-id should be unique and within name
++space controlled by the owner. It should remain constant even if lists
++move and be of the format
++
++.EX
++List-ID: optional_text <unique_id.domain>
++.EE
++
++This header would result from a
++.I dir\fB/listid
++file containing ``optional_text <unique_id.domain>''. See
++.I http://www.within.com/~chandhok/ietf/listid.shtml
++for more info.
++
+ The first lines of
+ .I dir\fB/outlocal
+ and
+@@ -292,6 +839,44 @@
+ This affects the behavior of
+ .BR ezmlm-send .
++If
++.I dir\fB/qmqpservers
++exists,
++.B ezmlm-send
++and
++.B ezmlm-get
++will use
++.B qmail-qmqpc(1)
++to send posts and digests. Other mail will use the normal qmail mechanism.
++If
++.B qmail-qmqpc
++is modified correctly, server IP addresses listed one per line in
++.I dir\fB/qmqpsevers
++will be tried in order, rather than the default servers specified in
++.IR /var/qmail/control .
++
++If
++.I dir\fB/msgsize
++exists, it is assumed to contain ``max:min'', where ``max'' is the maximum
++size in bytes of an acceptable message body, and ``min'' the corresponding
++minimal size. Either will be ignored if zero or omitted. If the
++.B ezmlm-reject
++command line specifies the list directory, messages not meeting the size
++criteria are rejected.
++
++If
++.I dir\fB/charset
++exists, the first line is assumed to represent a valid MIME character set,
++which is used for all outgoing MIME messages sent by
++.B ezmlm-get 
++and the message moderation programs. The character set string may be suffixed
++with ':' and 'Q' or 'B' to send all outgoing
++text (ezmlm messages, digest table-of-contents, moderation requests, etc)
++encoded in ``Quoted-Printable'' or ``base64'' encoding. By default, no encoding
++is done, which may result in the transmission of characters with the high
++bit set. When encoding is specified, trigger messages and other parts of the
++reply that should not be encoded are sent as separate MIME parts.
++
+ .I dir\fB/lock
+ is an empty file.
+ Any program that reads or writes the subscriber list,
+@@ -304,14 +889,54 @@
+ .B WARNING:
+ .B Log
+ is not protected against system crashes.
+-Log entries may be missing or corrupted if the system goes down.
++Log entries may be missing or corrupted if the system goes down. There is
++Log for each of the accessory address databases as well. Thus, the log
++for digest subscribers is
++.IR dir\fB/digest/Log .
++If enabled, these logs can be retrieved by remote administrators (see
++.BR ezmlm-manage(1) ).
++
++.I dir\fB/digest
++contains items specific for the digest list.
++
++.I dir\fB/digest/subscribers
++contains hash files of digest subscriber addresses.
++
++.IR dir\fB/digest/Log ,
++.IR dir\fB/digest/bounce ,
++.IR dir\fB/digest/lockbounce ,
++and
++.I dir\fB/digest/lock
++have functions for the digest list that mirror that of the corresponding
++files in
++.IR dir .
++
++.I dir\fB/sql
++contains SQL server access information for list that are configured to
++use an SQL database for storage.
++
++.I dir\fB/tstdig
++is a timestamp used temporarily by
++.B ezmlm-tstdig(1)
++to coordinate digesting.
+ .SH "SEE ALSO"
++ezmlm-check(1),
++ezmlm-clean(1),
++ezmlm-gate(1),
++ezmlm-get(1),
++ezmlm-idx(1),
++ezmlm-issub(1),
++ezmlm-issubn(1),
+ ezmlm-list(1),
+ ezmlm-make(1),
+ ezmlm-manage(1),
++ezmlm-moderate(1),
++ezmlm-request(1),
+ ezmlm-return(1),
+ ezmlm-send(1),
++ezmlm-store(1),
+ ezmlm-sub(1),
++ezmlm-tstdig(1),
+ ezmlm-unsub(1),
+ ezmlm-warn(1),
+ dot-qmail(5)
+--- log.c      1998/02/16 04:49:24     1.1
++++ log.c      1998/11/22 22:24:22     1.3
+@@ -6,14 +6,21 @@
+ #include "fmt.h"
+ #include "open.h"
++/* appends (not crash-proof) a line to "Log". The format is: */
++/* "timestamp event address[ comment]\n". address is free of ' ' */
++/* Unprintable chars are changed to '?'. Comment may have spaces */
++
+ static substdio ss;
+ static char buf[1];
+ static char num[FMT_ULONG];
+ static stralloc line = {0};
++static stralloc fn = {0};
+-void log(event,addr)
++void log(dir,event,addr,comment)
++char *dir;
+ char *event;
+ char *addr;
++char *comment;
+ {
+   char ch;
+   int fd;
+@@ -26,9 +33,22 @@
+     if ((ch < 33) || (ch > 126)) ch = '?';
+     if (!stralloc_append(&line,&ch)) return;
+   }
++  if (comment && *comment) {
++    if (!stralloc_cats(&line," ")) return;
++    while (ch = *comment++) {
++      if (ch == '\t')
++        ch = ' ';
++      else 
++        if ((ch < 32) || (ch > 126)) ch = '?';
++      if (!stralloc_append(&line,&ch)) return;
++    }
++  }
+   if (!stralloc_cats(&line,"\n")) return;
+-  fd = open_append("Log");
++  if (!stralloc_copys(&fn,dir)) return;
++  if (!stralloc_cats(&fn,"/Log")) return;
++  if (!stralloc_0(&fn)) return;
++  fd = open_append(fn.s);
+   if (fd == -1) return;
+   substdio_fdbuf(&ss,write,fd,buf,sizeof(buf));
+   substdio_putflush(&ss,line.s,line.len);
+--- MAN        1997/07/02 23:11:57     1.1
++++ MAN        1999/10/10 03:41:20     1.26
+@@ -1,27 +1,67 @@
+ d:::755:::
+ d:::755:/man1::
+ d:::755:/man5::
++c:::644:/man1/:ezmlm-accept.1:
++c:::644:/man1/:ezmlm-archive.1:
++c:::644:/man1/:ezmlm-issubn.1:
+ c:::644:/man5/:ezmlm.5:
++c:::644:/man5/:ezmlmrc.5:
++c:::644:/man5/:ezmlmglrc.5:
++c:::644:/man5/:ezmlmsubrc.5:
+ c:::644:/man1/:ezmlm-list.1:
++c:::644:/man1/:ezmlm-glconf.1:
+ c:::644:/man1/:ezmlm-make.1:
++c:::644:/man1/:ezmlm-mktab.1:
+ c:::644:/man1/:ezmlm-manage.1:
++c:::644:/man1/:ezmlm-moderate.1:
+ c:::644:/man1/:ezmlm-reject.1:
++c:::644:/man1/:ezmlm-request.1:
+ c:::644:/man1/:ezmlm-return.1:
+ c:::644:/man1/:ezmlm-send.1:
++c:::644:/man1/:ezmlm-split.1:
++c:::644:/man1/:ezmlm-store.1:
+ c:::644:/man1/:ezmlm-sub.1:
+ c:::644:/man1/:ezmlm-unsub.1:
+ c:::644:/man1/:ezmlm-warn.1:
+ c:::644:/man1/:ezmlm-weed.1:
++c:::644:/man1/:ezmlm-idx.1:
++c:::644:/man1/:ezmlm-gate.1:
++c:::644:/man1/:ezmlm-tstdig.1:
++c:::644:/man1/:ezmlm-get.1:
++c:::644:/man1/:ezmlm-check.1:
++c:::644:/man1/:ezmlm-clean.1:
++c:::644:/man1/:ezmlm-limit.1:
++c:::644:/man1/:ezmlm-cron.1:
+ d:::755:/cat1::
+ d:::755:/cat5::
+ c:::644:/cat5/:ezmlm.0:
++c:::644:/cat5/:ezmlmrc.0:
++c:::644:/cat5/:ezmlmglrc.0:
++c:::644:/cat5/:ezmlmsubrc.0:
+ c:::644:/cat1/:ezmlm-list.0:
++c:::644:/cat1/:ezmlm-glconf.0:
+ c:::644:/cat1/:ezmlm-make.0:
++c:::644:/cat1/:ezmlm-mktab.0:
+ c:::644:/cat1/:ezmlm-manage.0:
++c:::644:/cat1/:ezmlm-moderate.0:
++c:::644:/cat1/:ezmlm-request.0:
+ c:::644:/cat1/:ezmlm-reject.0:
+ c:::644:/cat1/:ezmlm-return.0:
+ c:::644:/cat1/:ezmlm-send.0:
++c:::644:/cat1/:ezmlm-store.0:
++c:::644:/cat1/:ezmlm-split.0:
+ c:::644:/cat1/:ezmlm-sub.0:
+ c:::644:/cat1/:ezmlm-unsub.0:
+ c:::644:/cat1/:ezmlm-warn.0:
+ c:::644:/cat1/:ezmlm-weed.0:
++c:::644:/cat1/:ezmlm-idx.0:
++c:::644:/cat1/:ezmlm-gate.0:
++c:::644:/cat1/:ezmlm-tstdig.0:
++c:::644:/cat1/:ezmlm-get.0:
++c:::644:/cat1/:ezmlm-check.0:
++c:::644:/cat1/:ezmlm-clean.0:
++c:::644:/cat1/:ezmlm-limit.0:
++c:::644:/cat1/:ezmlm-cron.0:
++c:::644:/cat1/:ezmlm-accept.0:
++c:::644:/cat1/:ezmlm-archive.0:
++c:::644:/cat1/:ezmlm-issubn.0:
+--- BIN        1997/07/02 23:10:49     1.1
++++ BIN        1999/10/10 03:41:20     1.23
+@@ -1,11 +1,31 @@
+ d:::755:::
++c:::755:/:ezmlm-accept:
++c:::755:/:ezmlm-archive:
++c:::755:/:ezmlm-issubn:
++c:::755:/:ezmlm-glconf:
+ c:::755:/:ezmlm-make:
++c:::755:/:ezmlm-mktab:
+ c:::755:/:ezmlm-manage:
+ c:::755:/:ezmlm-send:
++c:::755:/:ezmlm-request:
+ c:::755:/:ezmlm-reject:
+ c:::755:/:ezmlm-return:
+ c:::755:/:ezmlm-warn:
+ c:::755:/:ezmlm-weed:
+ c:::755:/:ezmlm-list:
++c:::755:/:ezmlm-clean:
++c:::755:/:ezmlm-cron:
++c:::755:/:ezmlm-limit:
++c:::755:/:ezmlm-store:
++c:::755:/:ezmlm-split:
++c:::755:/:ezmlm-moderate:
+ c:::755:/:ezmlm-sub:
+ c:::755:/:ezmlm-unsub:
++c:::644:/:ezmlmrc:
++c:::644:/:ezmlmglrc:
++c:::644:/:ezmlmsubrc:
++c:::755:/:ezmlm-idx:
++c:::755:/:ezmlm-check:
++c:::755:/:ezmlm-gate:
++c:::755:/:ezmlm-tstdig:
++c:::755:/:ezmlm-get:
+--- VERSION    1997/10/12 19:29:59     1.1
++++ VERSION    1997/11/08 04:19:44     1.3
+@@ -1 +1,2 @@
+ ezmlm 0.53
++$Name: ezmlm-idx-040 $
+--- Makefile   1997/07/02 22:17:50     1.1
++++ Makefile   1999/12/23 02:42:12     1.117
+@@ -1,7 +1,14 @@
++#$Id: Makefile,v 1.117 1999/12/23 02:42:12 lindberg Exp $
++#$Name: ezmlm-idx-040 $
+ SHELL=/bin/sh
+-
++SQLCC=`head -1 conf-sqlcc`
++SQLLD=`head -1 conf-sqlld`
+ default: it
++clean: \
++TARGETS
++      rm -f `cat TARGETS`
++
+ alloc.0: \
+ alloc.3
+       nroff -man alloc.3 > alloc.0
+@@ -18,6 +25,10 @@
+ compile alloc_re.c alloc.h alloc_re.c byte.h alloc_re.c
+       ./compile alloc_re.c
++author.o: \
++compile author.c mime.h
++      ./compile author.c
++
+ auto-ccld.sh: \
+ conf-cc conf-ld warn-auto.sh
+       ( cat warn-auto.sh; \
+@@ -34,6 +45,14 @@
+ exit.h auto-str.c
+       ./compile auto-str.c
++auto_cron.c: \
++auto-str conf-cron
++      ./auto-str auto_cron `head -1 conf-cron` > auto_cron.c
++
++auto_cron.o: \
++compile auto_cron.c
++      ./compile auto_cron.c
++
+ auto_bin.c: \
+ auto-str conf-bin
+       ./auto-str auto_bin `head -1 conf-bin` > auto_bin.c
+@@ -79,13 +98,18 @@
+       nroff -man case.3 > case.0
+ case.a: \
+-makelib case_diffb.o case_lowerb.o case_startb.o
+-      ./makelib case.a case_diffb.o case_lowerb.o case_startb.o
++makelib case_diffb.o case_diffs.o case_starts.o case_lowerb.o case_startb.o
++      ./makelib case.a case_diffb.o case_lowerb.o case_startb.o \
++      case_diffs.o case_starts.o
+ case_diffb.o: \
+ compile case_diffb.c case.h case_diffb.c
+       ./compile case_diffb.c
++case_diffs.o: \
++compile case_diffs.c case.h
++      ./compile case_diffs.c
++
+ case_lowerb.o: \
+ compile case_lowerb.c case.h case_lowerb.c
+       ./compile case_lowerb.c
+@@ -94,6 +118,15 @@
+ compile case_startb.c case.h case_startb.c
+       ./compile case_startb.c
++checktag.o: \
++compile checktag.c stralloc.h scan.h fmt.h strerr.h cookie.h \
++      errtxt.h subscribe.h conf-sqlcc
++      ./compile checktag.c ${SQLCC}
++
++case_starts.o: \
++compile case_starts.c case.h
++      ./compile case_starts.c
++
+ compile: \
+ make-compile warn-auto.sh systype
+       ( cat warn-auto.sh; ./make-compile "`cat systype`" ) > \
+@@ -110,6 +143,19 @@
+ surfpcs.h uint32.h surfpcs.h cookie.c
+       ./compile cookie.c
++copy.o: \
++compile copy.c copy.h stralloc.h substdio.h str.h readwrite.h open.h qmail.h \
++strerr.h getln.h case.h errtxt.h mime.h error.h quote.h
++      ./compile copy.c
++
++date2yyyymm.o:\
++compile date2yyyymm.c yyyymm.h
++      ./compile date2yyyymm.c
++
++dateline.o:\
++compile dateline.c yyyymm.h stralloc.h fmt.h
++      ./compile dateline.c
++
+ date822fmt.o: \
+ compile date822fmt.c datetime.h date822fmt.c fmt.h date822fmt.c \
+ date822fmt.h date822fmt.c
+@@ -133,13 +179,46 @@
+       && cat direntry.h2 || cat direntry.h1 ) > direntry.h
+       rm -f trydrent.o
++concatHDR.o: \
++compile concatHDR.c mime.h stralloc.h strerr.h byte.h errtxt.h
++      ./compile concatHDR.c
++
++decodeB.o: \
++compile decodeB.c mime.h uint32.h stralloc.h strerr.h errtxt.h
++      ./compile decodeB.c
++
++decodeHDR.o: \
++compile decodeHDR.c mime.h stralloc.h strerr.h error.h case.h byte.h \
++uint32.h errtxt.h
++      ./compile decodeHDR.c
++
++decodeQ.o: \
++compile decodeQ.c mime.h stralloc.h strerr.h errtxt.h
++      ./compile decodeQ.c
++
++encodeB.o: \
++compile encodeB.c mime.h uint32.h stralloc.h strerr.h errtxt.h
++      ./compile encodeB.c
++
++encodeQ.o: \
++compile encodeQ.c mime.h stralloc.h strerr.h errtxt.h
++      ./compile encodeQ.c
++
++unfoldHDR.o: \
++compile unfoldHDR.c mime.h stralloc.h strerr.h errtxt.h
++      ./compile unfoldHDR.c
++
+ env.0: \
+ env.3
+       nroff -man env.3 > env.0
+ env.a: \
+-makelib envread.o
+-      ./makelib env.a envread.o
++makelib env.o envread.o
++      ./makelib env.a env.o envread.o
++
++env.o: \
++compile env.c env.h str.h
++      ./compile env.c
+ envread.o: \
+ compile envread.c env.h envread.c str.h envread.c
+@@ -169,28 +248,281 @@
+ error_temp.3
+       nroff -man error_temp.3 > error_temp.0
++ezmlm-accept: \
++ezmlm-accept.sh warn-auto.sh conf-bin
++      (cat warn-auto.sh; \
++      echo EZPATH=\'`head -1 conf-bin`\'; \
++      cat ezmlm-accept.sh ) > ezmlm-accept
++
++ezmlm-accept.0: \
++ezmlm-accept.1
++      nroff -man ezmlm-accept.1 > ezmlm-accept.0
++
++ezmlm-archive: \
++load ezmlm-archive.o getconf.o slurpclose.o slurp.o getln.a sig.a \
++strerr.a substdio.a stralloc.a alloc.a error.a str.a fs.a open.a \
++lock.a fd.a getopt.a idxthread.o yyyymm.a
++      ./load ezmlm-archive getconf.o slurpclose.o slurp.o getln.a sig.a \
++      idxthread.o yyyymm.a strerr.a substdio.a stralloc.a alloc.a \
++      error.a str.a fs.a open.a lock.a fd.a getopt.a
++
++ezmlm-archive.0: \
++ezmlm-archive.1
++      nroff -man ezmlm-archive.1 > ezmlm-archive.0
++
++ezmlm-archive.o: \
++compile ezmlm-archive.c alloc.h error.h stralloc.h gen_alloc.h str.h \
++sig.h slurp.h getconf.h strerr.h getln.h substdio.h readwrite.h \
++makehash.h fmt.h strerr.h errtxt.h idx.h idxthread.h sgetopt.h subgetopt.h
++      ./compile ezmlm-archive.c
++
++ezmlm-cgi: \
++load ezmlm-cgi.o getconf.o slurpclose.o slurp.o constmap.o getln.a sig.a \
++mime.a strerr.a substdio.a stralloc.a alloc.a error.a str.a fs.a open.a \
++lock.a fd.a getopt.a env.a case.a datetime.o now.o mime.a wait.a yyyymm.a
++      ./load ezmlm-cgi getconf.o slurpclose.o slurp.o constmap.o getln.a \
++      mime.a sig.a env.a case.a datetime.o now.o mime.a wait.a yyyymm.a \
++      strerr.a substdio.a stralloc.a alloc.a error.a str.a fs.a open.a \
++      lock.a fd.a getopt.a
++
++ezmlm-cgi.0: \
++ezmlm-cgi.1
++      nroff -man ezmlm-cgi.1 > ezmlm-cgi.0
++
++ezmlm-cgi.o: \
++compile ezmlm-cgi.c alloc.h error.h stralloc.h gen_alloc.h str.h \
++sig.h slurp.h getconf.h strerr.h getln.h substdio.h readwrite.h env.h \
++makehash.h fmt.h strerr.h errtxt.h idx.h idxthread.h mime.h \
++constmap.h sgetopt.h subgetopt.h datetime.h now.h fork.h wait.h
++      ./compile ezmlm-cgi.c
++
++ezmlm-check: \
++ezmlm-check.sh warn-auto.sh conf-bin
++      (cat warn-auto.sh; \
++      echo EZPATH=\'`head -1 conf-bin`\'; \
++      echo QMPATH=\'`head -1 conf-qmail`\'; \
++      cat ezmlm-check.sh ) > ezmlm-check
++
++ezmlm-check.0: \
++ezmlm-check.1
++      nroff -man ezmlm-check.1 > ezmlm-check.0
++
++ezmlm-clean: \
++load ezmlm-clean.o auto_qmail.o getconf.o copy.o mime.a \
++now.o datetime.o date822fmt.o slurpclose.o slurp.o qmail.o quote.o \
++getln.a env.a sig.a strerr.a substdio.a stralloc.a alloc.a surf.a \
++error.a str.a fs.a case.a open.a seek.a wait.a lock.a fd.a cookie.o getopt.a
++      ./load ezmlm-clean auto_qmail.o getconf.o copy.o mime.a \
++      now.o datetime.o date822fmt.o slurpclose.o \
++      slurp.o qmail.o quote.o getln.a env.a sig.a strerr.a \
++      substdio.a stralloc.a alloc.a error.a str.a fs.a case.a \
++      open.a seek.a wait.a lock.a fd.a cookie.o getopt.a surf.a
++
++ezmlm-clean.0: \
++ezmlm-clean.1
++      nroff -man ezmlm-clean.1 > ezmlm-clean.0
++
++ezmlm-clean.o: \
++compile ezmlm-clean.c error.h stralloc.h gen_alloc.h str.h \
++env.h sig.h slurp.h getconf.h strerr.h byte.h getln.h case.h copy.h mime.h \
++qmail.h substdio.h readwrite.h seek.h quote.h datetime.h now.h cookie.h \
++date822fmt.h direntry.h fmt.h strerr.h errtxt.h idx.h sgetopt.h subgetopt.h
++      ./compile ezmlm-clean.c
++
++ezmlm-cron: \
++load ezmlm-cron.o strerr.a stralloc.a alloc.a error.a open.a auto_qmail.o \
++getopt.a getln.a str.a substdio.a sig.a fs.a open.a fd.a lock.a wait.a \
++case.a auto_cron.o
++      ./load ezmlm-cron getopt.a getln.a strerr.a substdio.a \
++      stralloc.a alloc.a sig.a fs.a open.a fd.a lock.a error.a \
++      wait.a case.a str.a auto_qmail.o auto_cron.o
++
++ezmlm-cron.0: \
++ezmlm-cron.1
++      nroff -man ezmlm-cron.1 > ezmlm-cron.0
++
++ezmlm-cron.o: \
++compile ezmlm-cron.c strerr.h substdio.h stralloc.h error.h str.h \
++fork.h readwrite.h wait.h errtxt.h idx.h sgetopt.h auto_qmail.h \
++fmt.h auto_cron.h
++      ./compile ezmlm-cron.c
++
++ezmlm-gate: \
++load ezmlm-gate.o subdb.a auto_bin.o getopt.a getln.a env.a sig.a strerr.a \
++stralloc.a alloc.a error.a str.a case.a wait.a substdio.a open.a lock.a \
++fs.a getconf.o slurpclose.o slurp.o seek.a conf-sqlld
++      ./load ezmlm-gate subdb.a getconf.o slurpclose.o slurp.o \
++      getopt.a getln.a auto_bin.o env.a sig.a fs.a \
++      strerr.a substdio.a stralloc.a alloc.a error.a str.a case.a wait.a \
++      open.a lock.a seek.a ${SQLLD}
++
++ezmlm-gate.0: \
++ezmlm-gate.1
++      nroff -man ezmlm-gate.1 > ezmlm-gate.0
++
++ezmlm-gate.o: \
++compile ezmlm-gate.c idx.h errtxt.h subscribe.h auto_bin.h \
++sgetopt.h subgetopt.h substdio.h getconf.h \
++env.h sig.h strerr.h stralloc.h alloc.h error.h str.h case.h \
++fork.h wait.h exit.h getln.h open.h
++      ./compile ezmlm-gate.c
++
++ezmlm-get: \
++load ezmlm-get.o idxthread.o subdb.a auto_qmail.o getopt.a now.o getconf.o \
++datetime.o date822fmt.o slurpclose.o slurp.o qmail.o quote.o makehash.o \
++cookie.o surf.a yyyymm.a \
++constmap.o getln.a env.a sig.a strerr.a substdio.a mime.a stralloc.a alloc.a \
++error.a str.a fs.a case.a open.a seek.a wait.a lock.a fd.a copy.o conf-sqlld
++      ./load ezmlm-get idxthread.o subdb.a auto_qmail.o getopt.a getconf.o \
++      now.o datetime.o date822fmt.o cookie.o makehash.o slurpclose.o slurp.o \
++      yyyymm.a \
++      constmap.o substdio.a copy.o mime.a strerr.a stralloc.a alloc.a \
++      qmail.o quote.o surf.a getln.a env.a sig.a \
++      error.a str.a fs.a case.a \
++      open.a seek.a wait.a lock.a fd.a ${SQLLD}
++
++ezmlm-get.o: \
++compile ezmlm-get.c idx.h errtxt.h error.h getconf.h stralloc.h gen_alloc.h \
++str.h cookie.h env.h sig.h slurp.h strerr.h byte.h getln.h case.h qmail.h \
++substdio.h readwrite.h seek.h quote.h sgetopt.h subgetopt.h datetime.h now.h \
++date822fmt.h fmt.h strerr.h copy.h errtxt.h idx.h idxthread.h mime.h \
++constmap.h makehash.h
++      ./compile ezmlm-get.c
++
++ezmlm-get.0: \
++ezmlm-get.1
++      nroff -man ezmlm-get.1 > ezmlm-get.0
++
++ezmlm-greturn: \
++load ezmlm-greturn.o quote.o getconf.o subdb.a log.o \
++slurpclose.o slurp.o now.o cookie.o surf.a lock.a env.a sig.a \
++strerr.a getln.a substdio.a stralloc.a alloc.a error.a str.a fs.a \
++case.a open.a conf-sqlld
++      ./load ezmlm-greturn quote.o getconf.o subdb.a \
++      log.o slurpclose.o slurp.o now.o cookie.o surf.a lock.a \
++      env.a sig.a strerr.a getln.a substdio.a stralloc.a alloc.a \
++      error.a str.a fs.a case.a open.a ${SQLLD}
++
++ezmlm-greturn.0: \
++ezmlm-greturn.1
++      nroff -man ezmlm-greturn.1 > ezmlm-greturn.0
++
++ezmlm-greturn.o: \
++compile ezmlm-greturn.c stralloc.h gen_alloc.h stralloc.h str.h env.h sig.h \
++slurp.h getconf.h strerr.h byte.h case.h getln.h substdio.h error.h \
++quote.h readwrite.h fmt.h datetime.h now.h cookie.h \
++strerr.h subscribe.h
++      ./compile ezmlm-greturn.c
++
++ezmlm-gwarn: \
++load ezmlm-gwarn.o auto_qmail.o getconf.o mime.a cookie.o subdb.a now.o \
++slurpclose.o slurp.o quote.o datetime.o date822fmt.o qmail.o surf.a \
++case.a strerr.a sig.a getln.a substdio.a stralloc.a alloc.a error.a \
++open.a lock.a str.a fs.a fd.a wait.a copy.o getopt.a conf-sqlld
++      ./load ezmlm-gwarn auto_qmail.o getconf.o mime.a \
++      cookie.o subdb.a getopt.a \
++      now.o slurpclose.o slurp.o quote.o datetime.o date822fmt.o \
++      qmail.o surf.a case.a strerr.a sig.a getln.a substdio.a \
++      stralloc.a alloc.a error.a open.a lock.a str.a fs.a fd.a \
++      wait.a copy.o ${SQLLD}
++
++ezmlm-gwarn.0: \
++ezmlm-gwarn.1
++      nroff -man ezmlm-gwarn.1 > ezmlm-gwarn.0
++
++ezmlm-gwarn.o: \
++compile ezmlm-gwarn.c direntry.h readwrite.h getln.h \
++substdio.h stralloc.h gen_alloc.h slurp.h getconf.h byte.h error.h str.h \
++sig.h now.h datetime.h  date822fmt.h fmt.h cookie.h qmail.h substdio.h \
++qmail.h copy.h mime.h idx.h errtxt.h sgetopt.h subgetopt.h
++      ./compile ezmlm-gwarn.c
++
++ezmlm-idx: \
++load ezmlm-idx.o slurp.o slurpclose.o mime.a wait.a getopt.a \
++getln.a strerr.a sig.h sig.a open.a lock.a substdio.a stralloc.a \
++alloc.a error.a str.a fd.a case.a fs.a getconf.o makehash.o surf.o mime.a
++      ./load ezmlm-idx \
++      mime.a slurp.o slurpclose.o wait.a getln.a strerr.a sig.a open.a \
++      lock.a mime.a substdio.a stralloc.a alloc.a error.a str.a fd.a \
++      getopt.a case.a fs.a getconf.o makehash.o surf.o
++
++ezmlm-idx.o: \
++compile ezmlm-idx.c stralloc.h getconf.h \
++substdio.h subfd.h strerr.h error.h sgetopt.h \
++lock.h sig.h slurp.h open.h getln.h case.h \
++str.h fmt.h readwrite.h exit.h idx.h mime.h errtxt.h uint32.h
++      ./compile ezmlm-idx.c
++
++ezmlm-idx.0: \
++ezmlm-idx.1
++      nroff -man ezmlm-idx.1 > ezmlm-idx.0
++
++ezmlm-glconf: \
++ezmlm-glconf.sh warn-auto.sh conf-bin
++      (cat warn-auto.sh; \
++      echo EZPATH=\'`head -1 conf-bin`\'; \
++      cat ezmlm-glconf.sh ) > ezmlm-glconf
++
++ezmlm-glconf.0: \
++ezmlm-glconf.1
++      nroff -man ezmlm-glconf.1 > ezmlm-glconf.0
++
++ezmlm-issubn: \
++load ezmlm-issubn.o subdb.a getconf.o slurpclose.o slurp.o \
++env.a fs.a strerr.a getln.a getopt.a conf-sqlld \
++substdio.a stralloc.a alloc.a error.a str.a case.a open.a lock.a
++      ./load ezmlm-issubn subdb.a getconf.o slurpclose.o slurp.o \
++      getopt.a env.a fs.a strerr.a \
++      getln.a substdio.a stralloc.a alloc.a error.a str.a case.a \
++      open.a lock.a ${SQLLD}
++
++ezmlm-issubn.0: \
++ezmlm-issubn.1
++      nroff -man ezmlm-issubn.1 > ezmlm-issubn.0
++
++ezmlm-issubn.o: \
++compile ezmlm-issubn.c strerr.h subscribe.h env.h errtxt.h sgetopt.h idx.h
++      ./compile ezmlm-issubn.c
++
++ezmlm-limit: \
++load ezmlm-limit.o getconf.o slurpclose.o slurp.o substdio.a stralloc.a \
++alloc.a error.a str.a case.a open.a lock.a getopt.a fs.a sig.a now.o
++      ./load ezmlm-limit getconf.o slurpclose.o slurp.o getopt.a \
++      strerr.a substdio.a stralloc.a alloc.a error.a str.a case.a \
++      open.a lock.a fs.a sig.a now.o
++
++ezmlm-limit.0: \
++ezmlm-limit.1
++      nroff -man ezmlm-limit.1 > ezmlm-limit.0
++
++ezmlm-limit.o: \
++compile ezmlm-limit.c stralloc.h strerr.h substdio.h readwrite.h sig.h lock.h \
++getconf.h fmt.h now.h sgetopt.h error.h errtxt.h idx.h datetime.h
++      ./compile ezmlm-limit.c
++
+ ezmlm-list: \
+-load ezmlm-list.o strerr.a getln.a substdio.a stralloc.a alloc.a \
+-error.a open.a str.a
+-      ./load ezmlm-list strerr.a getln.a substdio.a stralloc.a \
+-      alloc.a error.a open.a str.a 
++load ezmlm-list.o subdb.a fs.a getconf.o slurpclose.o slurp.o \
++strerr.a getln.a substdio.a stralloc.a alloc.a \
++error.a open.a str.a case.a getopt.a conf-sqlld
++      ./load ezmlm-list subdb.a fs.a getconf.o slurpclose.o slurp.o \
++      strerr.a getln.a getopt.a substdio.a stralloc.a \
++      alloc.a error.a open.a str.a case.a ${SQLLD}
+ ezmlm-list.0: \
+ ezmlm-list.1
+       nroff -man ezmlm-list.1 > ezmlm-list.0
+ ezmlm-list.o: \
+-compile ezmlm-list.c stralloc.h gen_alloc.h stralloc.h ezmlm-list.c \
+-substdio.h ezmlm-list.c getln.h ezmlm-list.c strerr.h ezmlm-list.c \
+-error.h ezmlm-list.c readwrite.h ezmlm-list.c exit.h ezmlm-list.c \
+-open.h ezmlm-list.c
++compile ezmlm-list.c stralloc.h gen_alloc.h substdio.h getln.h strerr.h \
++error.h readwrite.h exit.h open.h errtxt.h subscribe.h exit.h sgetopt.h \
++idx.h fmt.h
+       ./compile ezmlm-list.c
+ ezmlm-make: \
+-load ezmlm-make.o auto_bin.o open.a getopt.a substdio.a strerr.a \
+-stralloc.a alloc.a error.a str.a
+-      ./load ezmlm-make auto_bin.o open.a getopt.a substdio.a \
+-      strerr.a stralloc.a alloc.a error.a str.a 
++load ezmlm-make.o auto_bin.o open.a getln.a getopt.a substdio.a strerr.a \
++stralloc.a alloc.a error.a lock.a str.a
++      ./load ezmlm-make auto_bin.o open.a getln.a getopt.a substdio.a \
++      strerr.a stralloc.a alloc.a error.a lock.a str.a
+ ezmlm-make.0: \
+ ezmlm-make.1
+@@ -202,19 +534,20 @@
+ strerr.h ezmlm-make.c exit.h ezmlm-make.c readwrite.h ezmlm-make.c \
+ open.h ezmlm-make.c substdio.h ezmlm-make.c str.h ezmlm-make.c \
+ auto_bin.h ezmlm-make.c ezmlm-make.c ezmlm-make.c ezmlm-make.c \
+-ezmlm-make.c
++errtxt.h idx.h getln.h lock.h
+       ./compile ezmlm-make.c
+ ezmlm-manage: \
+-load ezmlm-manage.o auto_qmail.o getconf.o subscribe.o log.o cookie.o \
++load ezmlm-manage.o auto_qmail.o getconf.o subdb.a log.o cookie.o \
+ now.o datetime.o date822fmt.o slurpclose.o slurp.o qmail.o quote.o \
+ surf.a getln.a env.a sig.a strerr.a substdio.a stralloc.a alloc.a \
+-error.a str.a fs.a case.a open.a seek.a wait.a lock.a fd.a
+-      ./load ezmlm-manage auto_qmail.o getconf.o subscribe.o \
+-      log.o cookie.o now.o datetime.o date822fmt.o slurpclose.o \
++error.a str.a fs.a case.a open.a seek.a wait.a lock.a fd.a getopt.a \
++mime.a copy.o conf-sqlld
++      ./load ezmlm-manage subdb.a auto_qmail.o getconf.o copy.o \
++      mime.a log.o cookie.o now.o datetime.o date822fmt.o slurpclose.o \
+       slurp.o qmail.o quote.o surf.a getln.a env.a sig.a strerr.a \
+       substdio.a stralloc.a alloc.a error.a str.a fs.a case.a \
+-      open.a seek.a wait.a lock.a fd.a 
++      open.a seek.a wait.a lock.a fd.a getopt.a ${SQLLD}
+ ezmlm-manage.0: \
+ ezmlm-manage.1
+@@ -231,35 +564,84 @@
+ quote.h ezmlm-manage.c datetime.h ezmlm-manage.c now.h datetime.h \
+ datetime.h now.h ezmlm-manage.c date822fmt.h ezmlm-manage.c fmt.h \
+ ezmlm-manage.c subscribe.h strerr.h strerr.h subscribe.h \
+-ezmlm-manage.c cookie.h ezmlm-manage.c
++sgetopt.h subgetopt.h cookie.h idx.h errtxt.h copy.h
+       ./compile ezmlm-manage.c
++ezmlm-mktab.0: \
++ezmlm-mktab.1
++      nroff -man ezmlm-mktab.1 > ezmlm-mktab.0
++
++ezmlm-moderate: \
++load ezmlm-moderate.o auto_qmail.o getconf.o auto_bin.o copy.o mime.a \
++cookie.o now.o datetime.o date822fmt.o slurpclose.o slurp.o qmail.o quote.o \
++surf.a getln.a env.a sig.a strerr.a substdio.a stralloc.a alloc.a \
++error.a str.a fs.a case.a open.a seek.a wait.a lock.a fd.a getopt.a
++      ./load ezmlm-moderate auto_qmail.o getconf.o copy.o mime.a \
++      cookie.o now.o datetime.o date822fmt.o slurpclose.o \
++      slurp.o qmail.o quote.o surf.a getln.a env.a sig.a strerr.a \
++      substdio.a stralloc.a alloc.a error.a str.a fs.a case.a \
++      auto_bin.o open.a seek.a wait.a lock.a fd.a getopt.a
++
++ezmlm-moderate.0: \
++ezmlm-moderate.1
++      nroff -man ezmlm-moderate.1 > ezmlm-moderate.0
++
++ezmlm-moderate.o: \
++compile ezmlm-moderate.c error.h stralloc.h gen_alloc.h str.h \
++env.h sig.h slurp.h getconf.h strerr.h byte.h getln.h case.h \
++qmail.h substdio.h readwrite.h seek.h quote.h datetime.h now.h \
++date822fmt.h fmt.h strerr.h cookie.h errtxt.h idx.h copy.h mime.h \
++subgetopt.h sgetopt.h auto_bin.h fork.h wait.h
++      ./compile ezmlm-moderate.c
++
++ezmlm-request: \
++load ezmlm-request.o subdb.a getconf.o constmap.o getln.a auto_qmail.o qmail.o \
++strerr.a slurpclose.o slurp.o getopt.a env.a open.a fd.a sig.a case.a \
++substdio.a error.a stralloc.a alloc.a str.a case.a fs.a wait.a seek.a \
++date822fmt.o now.o datetime.o quote.o copy.o mime.a conf-sqlld
++      ./load ezmlm-request subdb.a getconf.o constmap.o getln.a auto_qmail.o \
++      qmail.o date822fmt.o datetime.o now.o quote.o \
++      slurpclose.o slurp.o env.a open.a sig.a wait.a getopt.a \
++      strerr.a substdio.a error.a copy.o stralloc.a alloc.a substdio.a \
++      str.a case.a fs.a fd.a sig.a wait.a seek.a mime.a ${SQLLD}
++
++ezmlm-request.0:
++      nroff -man ezmlm-request.1 > ezmlm-request.0
++
++ezmlm-request.o: \
++compile ezmlm-request.c stralloc.h subfd.h strerr.h error.h qmail.h env.h \
++sig.h open.h getln.h case.h str.h readwrite.h exit.h substdio.h quote.h \
++getconf.h constmap.h fmt.h byte.h errtxt.h idx.h datetime.h date822fmt.h \
++subscribe.h now.h copy.h
++      ./compile ezmlm-request.c
++
+ ezmlm-reject: \
+-load ezmlm-reject.o getln.a strerr.a substdio.a error.a stralloc.a \
+-alloc.a str.a getopt.a case.a
+-      ./load ezmlm-reject getln.a strerr.a substdio.a error.a \
+-      stralloc.a alloc.a str.a getopt.a case.a 
++load ezmlm-reject.o getln.a strerr.a substdio.a error.a stralloc.a open.a \
++qmail.o env.a seek.a fd.a wait.a auto_qmail.o \
++alloc.a getconf.o slurp.o slurpclose.o str.a getopt.a case.a constmap.o fs.a
++      ./load ezmlm-reject qmail.o getln.a strerr.a substdio.a error.a fs.a \
++      env.a constmap.o getconf.o slurp.o slurpclose.o stralloc.a alloc.a \
++      seek.a str.a getopt.a case.a open.a fd.a wait.a auto_qmail.o
+ ezmlm-reject.0: \
+ ezmlm-reject.1
+       nroff -man ezmlm-reject.1 > ezmlm-reject.0
+ ezmlm-reject.o: \
+-compile ezmlm-reject.c strerr.h ezmlm-reject.c substdio.h \
+-ezmlm-reject.c readwrite.h ezmlm-reject.c stralloc.h gen_alloc.h \
+-stralloc.h ezmlm-reject.c getln.h ezmlm-reject.c sgetopt.h \
+-subgetopt.h sgetopt.h ezmlm-reject.c
++compile ezmlm-reject.c strerr.h substdio.h readwrite.h stralloc.h gen_alloc.h \
++stralloc.h getln.h sgetopt.h subgetopt.h constmap.h getconf.h errtxt.h \
++scan.h fmt.h idx.h qmail.h env.h seek.h
+       ./compile ezmlm-reject.c
+ ezmlm-return: \
+-load ezmlm-return.o quote.o getconf.o issub.o subscribe.o log.o \
++load ezmlm-return.o quote.o getconf.o subdb.a log.o \
+ slurpclose.o slurp.o now.o cookie.o surf.a lock.a env.a sig.a \
+ strerr.a getln.a substdio.a stralloc.a alloc.a error.a str.a fs.a \
+-case.a open.a
+-      ./load ezmlm-return quote.o getconf.o issub.o subscribe.o \
++case.a open.a conf-sqlld
++      ./load ezmlm-return quote.o getconf.o subdb.a \
+       log.o slurpclose.o slurp.o now.o cookie.o surf.a lock.a \
+       env.a sig.a strerr.a getln.a substdio.a stralloc.a alloc.a \
+-      error.a str.a fs.a case.a open.a 
++      error.a str.a fs.a case.a open.a ${SQLLD}
+ ezmlm-return.0: \
+ ezmlm-return.1
+@@ -270,43 +652,134 @@
+ ezmlm-return.c str.h ezmlm-return.c env.h ezmlm-return.c sig.h \
+ ezmlm-return.c slurp.h ezmlm-return.c getconf.h ezmlm-return.c \
+ strerr.h ezmlm-return.c byte.h ezmlm-return.c case.h ezmlm-return.c \
+-getln.h ezmlm-return.c substdio.h ezmlm-return.c error.h \
++getln.h ezmlm-return.c substdio.h ezmlm-return.c error.h direntry.h \
+ ezmlm-return.c quote.h ezmlm-return.c readwrite.h ezmlm-return.c \
+ fmt.h ezmlm-return.c now.h datetime.h now.h ezmlm-return.c cookie.h \
+ ezmlm-return.c subscribe.h strerr.h strerr.h subscribe.h \
+-ezmlm-return.c issub.h strerr.h strerr.h issub.h ezmlm-return.c
++strerr.h strerr.h
+       ./compile ezmlm-return.c
+ ezmlm-send: \
+ load ezmlm-send.o auto_qmail.o getconf.o qmail.o constmap.o slurp.o \
+-slurpclose.o wait.a getln.a strerr.a sig.a env.a open.a lock.a \
+-substdio.a stralloc.a alloc.a error.a str.a fd.a case.a fs.a
+-      ./load ezmlm-send auto_qmail.o getconf.o qmail.o \
+-      constmap.o slurp.o slurpclose.o wait.a getln.a strerr.a \
+-      sig.a env.a open.a lock.a substdio.a stralloc.a alloc.a \
+-      error.a str.a fd.a case.a fs.a 
++slurpclose.o wait.a getln.a strerr.a sig.a env.a open.a lock.a conf-sqlld \
++substdio.a cookie.o stralloc.a alloc.a error.a str.a fd.a case.a fs.a surf.a \
++getopt.a copy.o mime.a subdb.a makehash.o surf.o makehash.o str.a quote.o
++      ./load ezmlm-send subdb.a cookie.o surf.a auto_qmail.o getconf.o \
++      getopt.a qmail.o quote.o constmap.o slurp.o slurpclose.o \
++      wait.a getln.a strerr.a \
++      sig.a env.a open.a lock.a substdio.a stralloc.a alloc.a error.a \
++      fd.a case.a fs.a getopt.a copy.o mime.a makehash.o str.a ${SQLLD}
+ ezmlm-send.0: \
+ ezmlm-send.1
+       nroff -man ezmlm-send.1 > ezmlm-send.0
+ ezmlm-send.o: \
+-compile ezmlm-send.c stralloc.h gen_alloc.h stralloc.h ezmlm-send.c \
+-subfd.h substdio.h subfd.h ezmlm-send.c strerr.h ezmlm-send.c error.h \
+-ezmlm-send.c qmail.h substdio.h substdio.h qmail.h ezmlm-send.c env.h \
+-ezmlm-send.c lock.h ezmlm-send.c sig.h ezmlm-send.c open.h \
+-ezmlm-send.c getln.h ezmlm-send.c case.h ezmlm-send.c scan.h \
+-ezmlm-send.c str.h ezmlm-send.c fmt.h ezmlm-send.c readwrite.h \
+-ezmlm-send.c exit.h ezmlm-send.c substdio.h substdio.h ezmlm-send.c \
+-getconf.h ezmlm-send.c constmap.h ezmlm-send.c
++compile ezmlm-send.c stralloc.h gen_alloc.h copy.h \
++subfd.h substdio.h strerr.h error.h qmail.h env.h makehash.h sgetopt.h \
++lock.h sig.h open.h getln.h case.h scan.h str.h fmt.h readwrite.h quote.h \
++exit.h getconf.h constmap.h byte.h errtxt.h idx.h mime.h subscribe.h \
++uint32.h
+       ./compile ezmlm-send.c
++ezmlm-master: \
++load ezmlm-master.o auto_qmail.o getconf.o qmail.o constmap.o slurp.o \
++slurpclose.o wait.a getln.a strerr.a sig.a env.a open.a lock.a conf-sqlld \
++substdio.a cookie.o stralloc.a alloc.a error.a str.a fd.a case.a fs.a surf.a\
++getopt.a copy.o mime.a subdb.a makehash.o surf.o makehash.o str.a quote.o
++      ./load ezmlm-master subdb.a cookie.o surf.a auto_qmail.o getconf.o \
++      getopt.a qmail.o quote.o constmap.o slurp.o slurpclose.o \
++      wait.a getln.a strerr.a \
++      sig.a env.a open.a lock.a substdio.a stralloc.a alloc.a error.a \
++      fd.a case.a fs.a getopt.a copy.o mime.a makehash.o str.a ${SQLLD}
++
++ezmlm-master.0: \
++ezmlm-master.1
++      nroff -man ezmlm-master.1 > ezmlm-master.0
++
++ezmlm-master.o: \
++compile ezmlm-master.c stralloc.h gen_alloc.h copy.h \
++subfd.h substdio.h strerr.h error.h qmail.h env.h makehash.h sgetopt.h \
++lock.h sig.h open.h getln.h case.h scan.h str.h fmt.h readwrite.h quote.h \
++exit.h getconf.h constmap.h byte.h errtxt.h idx.h mime.h subscribe.h \
++uint32.h
++      ./compile ezmlm-master.c
++
++ezmlm-slave: \
++load ezmlm-slave.o auto_qmail.o getconf.o qmail.o constmap.o slurp.o \
++slurpclose.o wait.a getln.a strerr.a sig.a env.a open.a lock.a conf-sqlld \
++substdio.a cookie.o stralloc.a alloc.a error.a str.a fd.a case.a fs.a surf.a \
++getopt.a copy.o mime.a subdb.a makehash.o surf.o makehash.o str.a quote.o
++      ./load ezmlm-slave subdb.a cookie.o surf.a auto_qmail.o getconf.o \
++      getopt.a qmail.o quote.o constmap.o slurp.o slurpclose.o \
++      wait.a getln.a strerr.a \
++      sig.a env.a open.a lock.a substdio.a stralloc.a alloc.a error.a \
++      fd.a case.a fs.a getopt.a copy.o mime.a makehash.o str.a ${SQLLD}
++
++ezmlm-slave.0: \
++ezmlm-slave.1
++      nroff -man ezmlm-slave.1 > ezmlm-slave.0
++
++ezmlm-slave.o: \
++compile ezmlm-slave.c stralloc.h gen_alloc.h copy.h \
++subfd.h substdio.h strerr.h error.h qmail.h env.h makehash.h sgetopt.h \
++lock.h sig.h open.h getln.h case.h scan.h str.h fmt.h readwrite.h quote.h \
++exit.h getconf.h constmap.h byte.h errtxt.h idx.h mime.h subscribe.h \
++uint32.h
++      ./compile ezmlm-slave.c
++
++ezmlm-split: \
++load ezmlm-split.o auto_qmail.o getconf.o \
++slurpclose.o slurp.o qmail.o quote.o wait.a \
++getln.a env.a sig.a strerr.a substdio.a stralloc.a alloc.a \
++error.a str.a fs.a case.a open.a fd.a
++      ./load ezmlm-split auto_qmail.o getconf.o slurpclose.o \
++      slurp.o qmail.o quote.o getln.a env.a sig.a strerr.a \
++      substdio.a stralloc.a alloc.a error.a str.a fs.a case.a \
++      open.a fd.a wait.a
++
++ezmlm-split.0: \
++ezmlm-split.1
++      nroff -man ezmlm-split.1 > ezmlm-split.0
++
++ezmlm-split.o: \
++compile ezmlm-split.c error.h stralloc.h gen_alloc.h str.h \
++env.h sig.h getconf.h strerr.h byte.h getln.h case.h \
++qmail.h substdio.h  readwrite.h quote.h \
++fmt.h errtxt.h idx.h uint32.h
++      ./compile ezmlm-split.c
++
++ezmlm-store: \
++load ezmlm-store.o auto_qmail.o getconf.o subdb.a log.o auto_bin.o mime.a \
++cookie.o now.o datetime.o date822fmt.o slurpclose.o slurp.o qmail.o quote.o \
++surf.a getln.a env.a sig.a strerr.a substdio.a stralloc.a alloc.a conf-sqlld \
++error.a str.a fs.a case.a open.a seek.a wait.a lock.a fd.a getopt.a copy.o
++      ./load ezmlm-store auto_qmail.o getconf.o subdb.a copy.o mime.a \
++      log.o cookie.o now.o datetime.o date822fmt.o slurpclose.o \
++      slurp.o qmail.o quote.o surf.a getln.a env.a sig.a strerr.a \
++      substdio.a stralloc.a alloc.a error.a str.a fs.a case.a \
++      open.a seek.a wait.a lock.a fd.a getopt.a auto_bin.o ${SQLLD}
++
++ezmlm-store.0: \
++ezmlm-store.1
++      nroff -man ezmlm-store.1 > ezmlm-store.0
++
++ezmlm-store.o: \
++compile ezmlm-store.c error.h stralloc.h gen_alloc.h str.h \
++sgetopt.h subgetopt.h fork.h wait.h auto_bin.h lock.h mime.h \
++env.h sig.h slurp.h getconf.h strerr.h byte.h getln.h case.h \
++qmail.h substdio.h readwrite.h seek.h quote.h datetime.h now.h \
++date822fmt.h fmt.h subscribe.h strerr.h cookie.h errtxt.h idx.h copy.h
++      ./compile ezmlm-store.c
++
+ ezmlm-sub: \
+-load ezmlm-sub.o subscribe.o log.o now.o fs.a strerr.a getln.a \
++load ezmlm-sub.o subdb.a getconf.o slurpclose.o slurp.o \
++log.o now.o fs.a strerr.a getln.a getopt.a fs.a conf-sqlld \
+ substdio.a stralloc.a alloc.a error.a str.a case.a open.a lock.a
+-      ./load ezmlm-sub subscribe.o log.o now.o fs.a strerr.a \
++      ./load ezmlm-sub subdb.a getconf.o slurpclose.o slurp.o \
++      log.o now.o fs.a strerr.a getopt.a fs.a \
+       getln.a substdio.a stralloc.a alloc.a error.a str.a case.a \
+-      open.a lock.a 
++      open.a lock.a ${SQLLD}
+ ezmlm-sub.0: \
+ ezmlm-sub.1
+@@ -314,57 +787,86 @@
+ ezmlm-sub.o: \
+ compile ezmlm-sub.c strerr.h ezmlm-sub.c subscribe.h strerr.h \
+-strerr.h subscribe.h ezmlm-sub.c log.h ezmlm-sub.c
++getln.h substdio.h stralloc.h readwrite.h \
++strerr.h subscribe.h log.h errtxt.h sgetopt.h scan.h idx.h
+       ./compile ezmlm-sub.c
++ezmlm-test: \
++ezmlm-test.sh warn-auto.sh conf-bin
++      (cat warn-auto.sh; \
++      echo QMPATH=\'`head -1 conf-qmail`\'; \
++      cat ezmlm-test.sh ) > ezmlm-test; \
++      chmod 755 ezmlm-test
++
++ezmlm-test.0: \
++ezmlm-test.1
++      nroff -man ezmlm-test.1 > ezmlm-test.0
++
++ezmlm-tstdig: \
++load ezmlm-tstdig.o getopt.a getconf.o now.o fs.a strerr.a getln.a \
++lock.a \
++substdio.a stralloc.a alloc.a error.a str.a case.a sig.a \
++open.a slurpclose.o slurp.o env.a
++      ./load ezmlm-tstdig getopt.a getconf.o env.a now.o fs.a strerr.a \
++      lock.a getln.a substdio.a stralloc.a alloc.a error.a str.a case.a \
++      sig.a slurpclose.o slurp.o open.a 
++
++ezmlm-tstdig.0: \
++ezmlm-tstdig.1
++      nroff -man ezmlm-tstdig.1 > ezmlm-tstdig.0
++
++ezmlm-tstdig.o: \
++compile ezmlm-tstdig.c strerr.h sgetopt.h getconf.h \
++sig.h now.h errtxt.h stralloc.h sig.h env.h fmt.h substdio.h readwrite.h \
++now.h idx.h
++      ./compile ezmlm-tstdig.c
++
+ ezmlm-unsub: \
+-load ezmlm-unsub.o subscribe.o log.o now.o fs.a strerr.a getln.a \
++load ezmlm-unsub.o subdb.a getconf.o slurpclose.o slurp.o \
++log.o now.o fs.a strerr.a getln.a getopt.a fs.a conf-sqlld \
+ substdio.a stralloc.a alloc.a error.a str.a case.a open.a lock.a
+-      ./load ezmlm-unsub subscribe.o log.o now.o fs.a strerr.a \
++      ./load ezmlm-unsub subdb.a getopt.a getconf.o slurpclose.o slurp.o \
++      log.o now.o fs.a strerr.a fs.a \
+       getln.a substdio.a stralloc.a alloc.a error.a str.a case.a \
+-      open.a lock.a 
++      open.a lock.a ${SQLLD}
+ ezmlm-unsub.0: \
+ ezmlm-unsub.1
+       nroff -man ezmlm-unsub.1 > ezmlm-unsub.0
+ ezmlm-unsub.o: \
+-compile ezmlm-unsub.c strerr.h ezmlm-unsub.c subscribe.h strerr.h \
+-strerr.h subscribe.h ezmlm-unsub.c log.h ezmlm-unsub.c
++compile ezmlm-unsub.c strerr.h subscribe.h \
++log.h errtxt.h sgetopt.h scan.h idx.h readwrite.h stralloc.h substdio.h 
+       ./compile ezmlm-unsub.c
+ ezmlm-warn: \
+-load ezmlm-warn.o auto_qmail.o getconf.o cookie.o issub.o now.o \
++load ezmlm-warn.o auto_qmail.o getconf.o mime.a cookie.o subdb.a now.o \
+ slurpclose.o slurp.o quote.o datetime.o date822fmt.o qmail.o surf.a \
+ case.a strerr.a sig.a getln.a substdio.a stralloc.a alloc.a error.a \
+-open.a lock.a str.a fs.a fd.a wait.a
+-      ./load ezmlm-warn auto_qmail.o getconf.o cookie.o issub.o \
++open.a lock.a str.a fs.a fd.a wait.a copy.o getopt.a conf-sqlld
++      ./load ezmlm-warn auto_qmail.o getconf.o mime.a \
++      cookie.o subdb.a getopt.a \
+       now.o slurpclose.o slurp.o quote.o datetime.o date822fmt.o \
+       qmail.o surf.a case.a strerr.a sig.a getln.a substdio.a \
+       stralloc.a alloc.a error.a open.a lock.a str.a fs.a fd.a \
+-      wait.a 
++      wait.a copy.o ${SQLLD}
+ ezmlm-warn.0: \
+ ezmlm-warn.1
+       nroff -man ezmlm-warn.1 > ezmlm-warn.0
+ ezmlm-warn.o: \
+-compile ezmlm-warn.c ezmlm-warn.c ezmlm-warn.c direntry.h direntry.h \
+-direntry.h ezmlm-warn.c readwrite.h ezmlm-warn.c getln.h ezmlm-warn.c \
+-substdio.h ezmlm-warn.c stralloc.h gen_alloc.h stralloc.h \
+-ezmlm-warn.c slurp.h ezmlm-warn.c getconf.h ezmlm-warn.c byte.h \
+-ezmlm-warn.c error.h ezmlm-warn.c str.h ezmlm-warn.c strerr.h \
+-ezmlm-warn.c sig.h ezmlm-warn.c now.h datetime.h now.h ezmlm-warn.c \
+-datetime.h datetime.h ezmlm-warn.c date822fmt.h ezmlm-warn.c fmt.h \
+-ezmlm-warn.c cookie.h ezmlm-warn.c qmail.h substdio.h substdio.h \
+-qmail.h ezmlm-warn.c
++compile ezmlm-warn.c direntry.h readwrite.h getln.h \
++substdio.h stralloc.h gen_alloc.h slurp.h getconf.h byte.h error.h str.h \
++sig.h now.h datetime.h  date822fmt.h fmt.h cookie.h qmail.h substdio.h \
++qmail.h copy.h mime.h idx.h errtxt.h sgetopt.h subgetopt.h
+       ./compile ezmlm-warn.c
+ ezmlm-weed: \
+-load ezmlm-weed.o getln.a strerr.a substdio.a error.a stralloc.a \
++load ezmlm-weed.o getln.a strerr.a substdio.a error.a case.a stralloc.a \
+ alloc.a str.a
+       ./load ezmlm-weed getln.a strerr.a substdio.a error.a \
+-      stralloc.a alloc.a str.a 
++      case.a stralloc.a alloc.a str.a 
+ ezmlm-weed.0: \
+ ezmlm-weed.1
+@@ -380,6 +882,18 @@
+ ezmlm.5
+       nroff -man ezmlm.5 > ezmlm.0
++ezmlmglrc.0: \
++ezmlmglrc.5
++      nroff -man ezmlmglrc.5 > ezmlmglrc.0
++
++ezmlmrc.0: \
++ezmlmrc.5
++      nroff -man ezmlmrc.5 > ezmlmrc.0
++
++ezmlmsubrc.0: \
++ezmlmsubrc.5
++      nroff -man ezmlmsubrc.5 > ezmlmsubrc.0
++
+ fd.a: \
+ makelib fd_copy.o fd_move.o
+       ./makelib fd.a fd_copy.o fd_move.o
+@@ -496,16 +1010,23 @@
+ byte.h install.c
+       ./compile install.c
++idxthread.o: \
++compile idxthread.c idxthread.h alloc.h error.h stralloc.h str.h lock.h idx.h \
++substdio.h fmt.h readwrite.h idx.h errtxt.h substdio.h byte.h yyyymm.h
++      ./compile idxthread.c
++
+ issub.o: \
+-compile issub.c stralloc.h gen_alloc.h stralloc.h issub.c getln.h \
+-issub.c readwrite.h issub.c substdio.h issub.c open.h issub.c byte.h \
+-issub.c case.h issub.c lock.h issub.c error.h issub.c issub.h \
+-strerr.h issub.h issub.c uint32.h issub.c
+-      ./compile issub.c
++compile issub.c stralloc.h gen_alloc.h getln.h readwrite.h substdio.h \
++open.h byte.h case.h lock.h error.h subscribe.h strerr.h uint32.h fmt.h \
++conf-sqlcc
++      ./compile issub.c ${SQLCC}
+ it: \
++ezmlm-idx ezmlm-accept ezmlm-archive ezmlm-check ezmlm-gate ezmlm-get \
++ezmlm-clean ezmlm-glconf ezmlm-moderate ezmlm-store ezmlm-tstdig \
+ ezmlm-make ezmlm-manage ezmlm-send ezmlm-reject ezmlm-return \
+-ezmlm-warn ezmlm-weed ezmlm-list ezmlm-sub ezmlm-unsub
++ezmlm-warn ezmlm-weed ezmlm-list ezmlm-sub ezmlm-unsub ezmlm-cgi ezmlm-limit \
++ezmlm-issubn ezmlm-cron ezmlm-request ezmlm-test ezmlm-split ezmlmrc
+ load: \
+ make-load warn-auto.sh systype
+@@ -527,6 +1048,10 @@
+ fmt.h log.c open.h log.c
+       ./compile log.c
++logmsg.o: \
++compile logmsg.c stralloc.h fmt.h conf-sqlcc
++      ./compile logmsg.c ${SQLCC}
++
+ make-compile: \
+ make-compile.sh auto-ccld.sh
+       cat auto-ccld.sh make-compile.sh > make-compile
+@@ -542,6 +1067,10 @@
+       cat auto-ccld.sh make-makelib.sh > make-makelib
+       chmod 755 make-makelib
++makehash.o: \
++makehash.c makehash.h surf.h uint32.h stralloc.h
++      ./compile makehash.c
++
+ makelib: \
+ make-makelib warn-auto.sh systype
+       ( cat warn-auto.sh; ./make-makelib "`cat systype`" ) > \
+@@ -549,12 +1078,23 @@
+       chmod 755 makelib
+ man: \
+-ezmlm.0 ezmlm-make.0 ezmlm-manage.0 ezmlm-send.0 ezmlm-reject.0 \
++ezmlm.0 ezmlm-gate.0 ezmlm-idx.0 ezmlm-get.0 ezmlm-check.0 ezmlm-tstdig.0 \
++ezmlm-make.0 ezmlm-manage.0 ezmlm-send.0 ezmlm-reject.0 ezmlm-accept.0 \
+ ezmlm-return.0 ezmlm-warn.0 ezmlm-weed.0 ezmlm-list.0 ezmlm-sub.0 \
+ ezmlm-unsub.0 alloc.0 case.0 datetime.0 direntry.0 env.0 error.0 \
+ error_str.0 error_temp.0 ezmlm.0 fd_copy.0 fd_move.0 getln.0 getln2.0 \
++ezmlm-issubn.0 ezmlm-cron.0 ezmlm-glconf.0 ezmlmglrc.0 ezmlm-test.0 \
++ezmlmsubrc.0 ezmlm-mktab.0 ezmlm-split.0 ezmlm-archive.0 ezmlm-cgi.0 \
+ getopt.0 now.0 sgetopt.0 stralloc.0 subfd.0 subgetopt.0 substdio.0 \
+-substdio_copy.0 substdio_in.0 substdio_out.0 surf.0 surfpcs.0 wait.0
++substdio_copy.0 substdio_in.0 substdio_out.0 surf.0 surfpcs.0 wait.0 \
++ezmlm-clean.0 ezmlm-moderate.0 ezmlm-store.0 ezmlm-request.0 ezmlmrc.0 \
++ezmlm-limit.0
++
++mime.a: \
++makelib concatHDR.o decodeHDR.o unfoldHDR.o \
++decodeQ.o encodeQ.o decodeB.o encodeB.o author.o
++      ./makelib mime.a concatHDR.o decodeHDR.o decodeQ.o encodeQ.o \
++      decodeB.o encodeB.o unfoldHDR.o author.o
+ now.0: \
+ now.3
+@@ -582,6 +1122,16 @@
+ compile open_trunc.c open_trunc.c open_trunc.c open.h open_trunc.c
+       ./compile open_trunc.c
++opensql.o: \
++compile opensql.c error.h strerr.h errtxt.h \
++      str.h case.h stralloc.h subscribe.h conf-sqlcc
++      ./compile opensql.c ${SQLCC}
++
++putsubs.o: \
++compile putsubs.c error.h substdio.h strerr.h readwrite.h \
++str.h open.h case.h errtxt.h stralloc.h subscribe.h qmail.h fmt.h conf-sqlcc
++      ./compile putsubs.c ${SQLCC}
++
+ qmail.o: \
+ compile qmail.c substdio.h qmail.c readwrite.h qmail.c wait.h qmail.c \
+ exit.h qmail.c fork.h qmail.c fd.h qmail.c qmail.h substdio.h \
+@@ -601,6 +1151,12 @@
+ compile scan_ulong.c scan.h scan_ulong.c
+       ./compile scan_ulong.c
++searchlog.o: \
++compile searchlog.c case.h stralloc.h scan.h open.h datetime.h errtxt.h str.h \
++      datetime.h date822fmt.h substdio.h readwrite.h strerr.h error.h \
++      subscribe.h conf-sqlcc
++      ./compile searchlog.c ${SQLCC}
++
+ seek.a: \
+ makelib seek_set.o
+       ./makelib seek.a seek_set.o
+@@ -800,6 +1356,12 @@
+ compile strerr_sys.c error.h strerr_sys.c strerr.h strerr_sys.c
+       ./compile strerr_sys.c
++subdb.a: \
++makelib checktag.o issub.o logmsg.o subscribe.o opensql.o putsubs.o \
++      tagmsg.o searchlog.o
++      ./makelib subdb.a checktag.o issub.o logmsg.o subscribe.o \
++      opensql.o putsubs.o tagmsg.o searchlog.o
++
+ subfd.0: \
+ subfd.3
+       nroff -man subfd.3 > subfd.0
+@@ -818,12 +1380,10 @@
+       ./compile subgetopt.c
+ subscribe.o: \
+-compile subscribe.c stralloc.h gen_alloc.h stralloc.h subscribe.c \
+-getln.h subscribe.c readwrite.h subscribe.c substdio.h subscribe.c \
+-strerr.h subscribe.c open.h subscribe.c byte.h subscribe.c case.h \
+-subscribe.c lock.h subscribe.c error.h subscribe.c uint32.h \
+-subscribe.c subscribe.h strerr.h strerr.h subscribe.h subscribe.c
+-      ./compile subscribe.c
++compile subscribe.c stralloc.h gen_alloc.h stralloc.h \
++getln.h readwrite.h substdio.h strerr.h open.h byte.h case.h \
++lock.h error.h uint32.h subscribe.h idx.h fmt.h conf-sqlcc
++      ./compile subscribe.c ${SQLCC}
+ substdi.o: \
+ compile substdi.c substdio.h substdi.c byte.h substdi.c error.h \
+@@ -889,6 +1449,10 @@
+ find-systype trycpp.c
+       ./find-systype > systype
++tagmsg.o: \
++compile tagmsg.c stralloc.h slurp.h scan.h fmt.h strerr.h cookie.h conf-sqlcc
++      ./compile tagmsg.c ${SQLCC}
++
+ uint32.h: \
+ tryulong32.c compile load uint32.h1 uint32.h2
+       ( ( ./compile tryulong32.c && ./load tryulong32 && \
+@@ -907,3 +1471,124 @@
+ wait_pid.o: \
+ compile wait_pid.c wait_pid.c wait_pid.c error.h wait_pid.c
+       ./compile wait_pid.c
++
++yyyymm.a: \
++makelib date2yyyymm.o dateline.o
++      ./makelib yyyymm.a date2yyyymm.o dateline.o
++
++ch: \
++ezmlmrc.ch
++      cp -f ezmlmrc.ch_GB ezmlmrc
++
++ch_GB: \
++ezmlmrc.ch_GB
++      cp -f ezmlmrc.ch_GB ezmlmrc
++
++cs: \
++ezmlmrc.cs
++      cp -f ezmlmrc.cs ezmlmrc
++
++da: \
++ezmlmrc.da
++      cp -f ezmlmrc.da ezmlmrc
++
++de: \
++ezmlmrc.de
++      cp -f ezmlmrc.de ezmlmrc
++
++en_US: \
++ezmlmrc.en_US
++      cp -f ezmlmrc.en_US ezmlmrc
++
++en: \
++ezmlmrc.en_US
++      cp -f ezmlmrc.en_US ezmlmrc
++
++es: \
++ezmlmrc.es
++      cp -f ezmlmrc.es ezmlmrc
++
++us: \
++ezmlmrc.en_US
++      cp -f ezmlmrc.en_US ezmlmrc
++
++ezmlmrc: \
++ezmlmrc.en_US
++      cp -f ezmlmrc.en_US ezmlmrc
++
++fr: \
++ezmlmrc.fr
++      cp -f ezmlmrc.fr ezmlmrc
++
++id: \
++ezmlmrc.id
++      cp -f ezmlmrc.id ezmlmrc
++
++ita: \
++ezmlmrc.it
++      cp -f ezmlmrc.it ezmlmrc
++
++jp: \
++ezmlmrc.jp
++      cp -f ezmlmrc.jp ezmlmrc
++
++pl: \
++ezmlmrc.pl
++      cp -f ezmlmrc.pl ezmlmrc
++
++pt: \
++ezmlmrc.pt
++      cp -f ezmlmrc.pt ezmlmrc
++
++pt_BR: \
++ezmlmrc.pt_BR
++      cp -f ezmlmrc.pt_BR ezmlmrc
++
++ru: \
++ezmlmrc.ru
++      cp -f ezmlmrc.ru ezmlmrc
++
++sv: \
++ezmlmrc.sv
++      cp -f ezmlmrc.sv ezmlmrc
++
++mysql:
++      ln -sf sub_mysql/ezmlm-mktab ezmlm-mktab
++      ln -sf sub_mysql/checktag.c checktag.c; rm -f checktag.o
++      ln -sf sub_mysql/issub.c issub.c; rm -f issub.o
++      ln -sf sub_mysql/logmsg.c logmsg.c; rm -f logmsg.o
++      ln -sf sub_mysql/subscribe.c subscribe.c; rm -f subscribe.o
++      ln -sf sub_mysql/opensql.c opensql.c; rm -f opensql.o
++      ln -sf sub_mysql/putsubs.c putsubs.c; rm -f putsubs.o
++      ln -sf sub_mysql/tagmsg.c tagmsg.c; rm -f tagmsg.o
++      ln -sf sub_mysql/searchlog.c searchlog.c; rm -f searchlog.o
++      ln -sf sub_mysql/conf-sqlld conf-sqlld; touch conf-sqlld
++      ln -sf sub_mysql/conf-sqlcc conf-sqlcc; touch conf-sqlcc
++
++pgsql:
++      ln -sf sub_pgsql/ezmlm-mktab ezmlm-mktab
++      ln -sf sub_pgsql/checktag.c checktag.c; rm -f checktag.o
++      ln -sf sub_pgsql/issub.c issub.c; rm -f issub.o
++      ln -sf sub_pgsql/logmsg.c logmsg.c; rm -f logmsg.o
++      ln -sf sub_pgsql/subscribe.c subscribe.c; rm -f subscribe.o
++      ln -sf sub_pgsql/opensql.c opensql.c; rm -f opensql.o
++      ln -sf sub_pgsql/putsubs.c putsubs.c; rm -f putsubs.o
++      ln -sf sub_pgsql/tagmsg.c tagmsg.c; rm -f tagmsg.o
++      ln -sf sub_pgsql/searchlog.c searchlog.c; rm -f searchlog.o
++      ln -sf sub_pgsql/conf-sqlld conf-sqlld; touch conf-sqlld
++      ln -sf sub_pgsql/conf-sqlcc conf-sqlcc; touch conf-sqlcc
++
++std:
++      ln -sf sub_std/ezmlm-mktab ezmlm-mktab
++      ln -sf sub_std/checktag.c checktag.c; rm -f checktag.o
++      ln -sf sub_std/issub.c issub.c; rm -f issub.o
++      ln -sf sub_std/logmsg.c logmsg.c; rm -f logmsg.o
++      ln -sf sub_std/subscribe.c subscribe.c; rm -f subscribe.o
++      ln -sf sub_std/opensql.c opensql.c; rm -f opensql.o
++      ln -sf sub_std/putsubs.c putsubs.c; rm -f putsubs.o
++      ln -sf sub_std/tagmsg.c tagmsg.c; rm -f tagmsg.o
++      ln -sf sub_std/searchlog.c searchlog.c; rm -f searchlog.o
++      ln -sf sub_std/conf-sqlld conf-sqlld; touch conf-sqlld
++      ln -sf sub_std/conf-sqlcc conf-sqlcc; touch conf-sqlcc
++
++
+--- constmap.c 1998/05/20 22:37:38     1.1
++++ constmap.c 1998/12/12 18:57:23     1.3
+@@ -18,6 +18,39 @@
+   return h;
+ }
++/* Returns index of string in constmap. 1 = first string, 2 = second ... */
++/* 0 not found. Use for commands */ 
++int constmap_index(cm,s,len)
++struct constmap *cm;
++char *s;
++int len;
++{
++  constmap_hash h;
++  int pos;
++  h = hash(s,len);
++  pos = cm->first[h & cm->mask];
++  while (pos != -1) {
++    if (h == cm->hash[pos])
++      if (len == cm->inputlen[pos])
++        if (!case_diffb(cm->input[pos],len,s))
++        return pos + 1;
++    pos = cm->next[pos];
++  }
++  return 0;
++}
++
++/* returns pointer to sz of string with index "idx". 1 = first, 2 = second...*/
++char *constmap_get(cm,idx)
++struct constmap *cm;
++int idx;
++
++{
++  if (idx <= 0 || idx > cm->num)
++    return 0;
++  else
++    return cm->input[idx-1];
++}
++
+ char *constmap(cm,s,len)
+ struct constmap *cm;
+ char *s;
+@@ -38,6 +71,9 @@
+ }
+ int constmap_init(cm,s,len,flagcolon)
++/* if flagcolon is true, we process only the stuff before the colon on */
++/* each line. Otherwise, it's the entire line. Still, the entire line */
++/* is stored! */
+ struct constmap *cm;
+ char *s;
+ int len;
+--- constmap.h 1998/05/20 22:37:38     1.1
++++ constmap.h 1999/09/29 03:16:11     1.3
+@@ -16,5 +16,6 @@
+ extern int constmap_init();
+ extern void constmap_free();
+ extern char *constmap();
+-
++extern char *constmap_get();
++extern int constmap_index();
+ #endif
+--- error.h    1999/01/09 01:36:11     1.1
++++ error.h    1999/01/09 01:59:56     1.2
+@@ -16,6 +16,7 @@
+ extern int error_pipe;
+ extern int error_perm;
+ extern int error_acces;
++extern int error_notdir;
+ extern char *error_str();
+ extern int error_temp();
+--- error.c    1999/01/09 01:36:42     1.1
++++ error.c    1999/01/09 01:59:56     1.2
+@@ -17,7 +17,7 @@
+ -2;
+ #endif
+-int error_noent = 
++int error_noent =
+ #ifdef ENOENT
+ ENOENT;
+ #else
+@@ -92,4 +92,11 @@
+ EACCES;
+ #else
+ -13;
++#endif
++
++int error_notdir =
++#ifdef ENOTDIR
++ENOTDIR;
++#else
++-14;
+ #endif
+--- ezmlm-weed.c       1999/04/11 19:09:55     1.1
++++ ezmlm-weed.c       1999/12/19 16:49:32     1.4
+@@ -5,18 +5,24 @@
+ #include "substdio.h"
+ #include "getln.h"
+ #include "strerr.h"
++#include "errtxt.h"
+ char buf0[256];
+ substdio ss0 = SUBSTDIO_FDBUF(read,0,buf0,sizeof(buf0));
+ #define FATAL "ezmlm-weed: fatal: "
++void die_nomem()
++{
++  strerr_die2x(111,FATAL,ERR_NOMEM);
++}
++
+ void get(sa)
+ stralloc *sa;
+ {
+   int match;
+   if (getln(&ss0,sa,&match,'\n') == -1)
+-    strerr_die2sys(111,FATAL,"unable to read input: ");
++    strerr_die2sys(111,FATAL,ERR_READ_INPUT);
+   if (!match) _exit(0);
+ }
+@@ -30,6 +36,9 @@
+ stralloc line7 = {0};
+ stralloc line8 = {0};
++stralloc boundary = {0};
++stralloc dsnline = {0};
++
+ char warn1[] = "    **********************************************";
+ char warn2[] = "    **      THIS IS A WARNING MESSAGE ONLY      **";
+ char warn3[] = "    **  YOU DO NOT NEED TO RESEND YOUR MESSAGE  **";
+@@ -40,19 +49,46 @@
+ int flagsr = 0;
+ int flagas = 0;
+ int flagbw = 0;
++int flagdsn = 0;
++
++int isboundary()
++/* returns 1 if line.len contains the mime bondary, 0 otherwise */
++{
++    if (line.s[0] == '-' && line.s[1] == '-' && line.len >= boundary.len + 3)
++      if (!byte_diff(line.s + 2,boundary.len,boundary.s))     /* boundary */
++        return 1;
++    return 0;
++}
+ void main()
+ {
+-  int match;
++  unsigned int i,j;
+   for (;;) {
+     get(&line);
+     if (line.len == 1) break;
+-
++    if (line.s[0] == ' ' || line.s[0] == '\t') {      /* continuation */
++      if (flagdsn) {
++      if (!stralloc_catb(&dsnline,line.s,line.len - 1)) die_nomem();
++      continue;
++      }
++    }
++    flagdsn = 0;
+     if (stralloc_starts(&line,"Subject: success notice"))
+       _exit(99);
+     if (stralloc_starts(&line,"Subject: deferral notice"))
+       _exit(99);
++    if (stralloc_starts(&line,"Precedence: bulk"))
++      _exit(99);
++    if (stralloc_starts(&line,"Precedence: junk"))
++      _exit(99);
++/* for Novell Groupwise */
++    if (stralloc_starts(&line,"Subject: Message status - delivered"))
++      _exit(99);
++    if (stralloc_starts(&line,"Subject: Message status - opened"))
++      _exit(99);
++    if (stralloc_starts(&line,"Subject: Out of Office AutoReply:"))
++      _exit(99);
+     if (stralloc_starts(&line,"From: Mail Delivery Subsystem <MAILER-DAEMON@"))
+       flagmds = 1;
+@@ -62,6 +98,71 @@
+       flagsr = 1;
+     if (stralloc_starts(&line,"Auto-Submitted: auto-generated (warning"))
+       flagas = 1;
++    if (case_startb(line.s,line.len,"Content-type: multipart/report"))
++      if (!stralloc_copyb(&dsnline,line.s,line.len - 1)) die_nomem();
++      flagdsn = 1;
++  }                   /* end of header */
++
++  if (flagdsn) {      /* always only one recipient/action */
++    flagdsn = 0;      /* will be set for correct report type */
++    for (i=0; i < dsnline.len; i += 1+byte_chr(dsnline.s+i,dsnline.len-i,';')) {
++      while (dsnline.s[i] == ' ' || dsnline.s[i] == '\t')
++      if (++i >= dsnline.len) break;
++      if (case_startb(dsnline.s + i,dsnline.len - i,"report-type=")) {
++      i += 12;
++      while (dsnline.s[i] ==' ' || dsnline.s[i] =='\t' || dsnline.s[i] =='"')
++        if (++i >= dsnline.len) break;
++      if (case_startb(dsnline.s + i,dsnline.len - i,"delivery-status"))
++        flagdsn = 1;
++      } else if (case_startb(dsnline.s + i,dsnline.len - i,"boundary=")) {
++      i += 9;
++      while (dsnline.s[i] ==' ' || dsnline.s[i] =='\t')
++        if (++i >= dsnline.len) break;
++      if (dsnline.s[i] == '"') {
++        if (++i >= dsnline.len) break;
++        j = i + byte_chr(dsnline.s + i,dsnline.len - i,'"');
++        if (j >= dsnline.len) break;
++      } else {
++        j = i;
++        while (dsnline.s[j] !=' ' && dsnline.s[j] !='\t' &&
++              dsnline.s[j] !=';')
++          if (++j >= dsnline.len) break;
++      }                               /* got boundary */
++      if (!stralloc_copyb(&boundary,dsnline.s+i,j-i)) die_nomem();
++      }
++    }
++  }
++  if (flagdsn && boundary.len) {      /* parse DSN message */
++    get(&line);                       /* if bad format we exit(0) via get() */
++    for (;;) {
++      if (isboundary()) {
++      if (line.len == boundary.len + 5 && line.s[line.len - 1] == '-'
++              && line.s[line.len - 2] == '-')
++        _exit(99);                    /* end: not failure report */
++        get(&line);                   /* Content-type */
++        if (case_startb(line.s,line.len,"content-type:")) {
++        i = 13;
++        while (line.s[i] == ' ' || line.s[i] == '\t')
++              if (++i >= line.len) break;
++        if (case_startb(line.s+i,line.len-i,"message/delivery-status")) {
++          for (;;) {
++            get(&line);
++            if (isboundary()) break;
++            if (case_startb(line.s,line.len,"action:")) {
++              i = 8;
++              while (line.s[i] == ' ' || line.s[i] == '\t')
++                if (++i >= line.len) break;
++              if (case_startb(line.s + i, line.len - i,"failed"))
++                _exit(0);     /* failure notice */
++              else
++                _exit(99);    /* there shouldn't be more than 1 action */
++            }
++            }
++        }
++        }
++      } else
++      get(&line);
++    }
+   }
+   get(&line1);
+--- ezmlm-weed.1       1999/08/01 16:45:46     1.1
++++ ezmlm-weed.1       1999/12/19 16:53:18     1.3
+@@ -7,6 +7,8 @@
+ .B ezmlm-weed
+ reads a mail message from its standard input.
+ If it recognizes the message as an MTA warning message or success message,
++or as a message with precedence ``bulk'' or ``junk'' as generated by
++vacation autoresponders,
+ it exits 99;
+ this will cause
+ .B qmail-alias
+@@ -33,6 +35,13 @@
+    Subject: deferral notice
+ .EE
++Delivery-status notification (DSN, rfc1891). All DSN messages with ``Action''
++other than ``failed'':
++
++.EX
++   Content-type: multipart/report
++.EE
++
+ Warning message from sendmail, MIME form:
+ .EX
+@@ -104,6 +113,21 @@
+ .EX
+    THIS IS A WARNING MESSAGE ONLY
+ .EE
++
++Notification messages from Novell Groupwise:
++
++.EX
++  Subject: Message status - delivered
++.EE
++.br
++.EX
++  Subject: Message status - opened
++.EE
++.br
++.EX
++  Subject: Out of Office AutoReply:
++.EE
++
+ .SH "SEE ALSO"
+ ezmlm-return(1),
+ qmail-command(8)