X-Git-Url: https://git.distorted.org.uk/~mdw/ezmlm/blobdiff_plain/5b62e993b0af39700031c2875d7f6654e6a02850..f8beb284087c279acfb30506f5bb32baa4949b44:/idx.patch diff --git a/idx.patch b/idx.patch new file mode 100644 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 ++.EE ++ ++This header would result from a ++.I dir\fB/listid ++file containing ``optional_text ''. 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 = 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)