--- 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)