blob: 31bf8660a9d9cccf840a0486d3dd7e4e469bfafa [file]
.de Vb
.ft CW
.nf
.ne \\$1
..
.de Ve
.ft R
.fi
..
.TH ezmlm-split 1
.SH NAME
ezmlm-split \- distribute (un)subscribe requests to sublists
.SH SYNOPSIS
.B ezmlm-split
.I dir
[
.B \-dD
][
.I splitfile
]
.SH DESCRIPTION
If the action is
.I \-subscribe
or
.IR \-unsubscribe ,
.B ezmlm-split
analyzes the target of the request,
computing a hash in the range 0-52 from
the address, and determines the ``domain key'', i.e.
the two top levels of the host address in reverse order.
Thus, the domain entry for ``d@a.b.c'' becomes ``c.b''
and the one for ``d@a'' becomes ``a''.
The hash and domain parts are then tested against successive lines of
.I splitfile
(default is
.IR dir\fB/split ).
If a match is found, the request is forwarded to the corresponding
sublist, and
.B ezmlm-split
exits 99. If
.I splitfile
does not exist, a match is not found, or action is not
.I \-subscribe
or
.IR \-unsubscribe ,
.B ezmlm-split
exits 0.
In
.IR splitfile ,
blank lines and lines with ``#'' in position 1 are ignored. Other lines are
expected to be of the format ``dom:low:hi:list@host'', where ``dom'' is
the top level domain, ``low''-``hi'' the range of the hash (defaults 0 and 52),
and ``list@host'' the name of the corresponding list (default is the
local list). A line is considered to match if the address hash is
between ``low'' and ``hi'' inclusive and ``dom'' is empty,
or if the ``domain key'' matches ``dom'' for the full length of ``dom''. Thus,
the address ``user@aol.com'' would match ``com'' and ``aol.com'',
but not ``host.com''.
If the domain
specified is the top level domain up to 3 characters, the split is identical
as that used by the SQL subscriber interface. This is recommended.
There can be several entries for a given sublist.
.B ezmlm-split
can be used also for list with SQL-based sublisting. In this case,
addresses matching the
.I splitfile
are forwarded to the respective non-SQL sublist, and non-matching addresses
are handed by the SQL sublist.
If
.I dir\fB/qmqpservers
exists,
.B ezmlm-split will use
.B qmail-qmqp(1)
to send messages.
.SH OPTIONS
.TP
.B \-d
(Default.)
Do. Forward requests to the appropriate list.
.TP
.B \-D
Do not process messages. Rather, read addresses, one per line from stdin, and
print ``sublist@host: address'' where ``sublist@host'' is the address to which
the request would have been forwarded in normal operation. This is used to
process a set of existing addresses into a set of address collections, one
per sublist. The output can be sorted and easily processed into a set of files,
one per sublist containing the addresses that sublist handles.
.SH "SPLIT LIST SETUP"
To use a hierarchy of sublists, set up the master list and add a
.B ezmlm-split
line before the
.B ezmlm-manage(1)
line in
.IR dir\fB/manager .
Create any number of sublists of the main list on other local or
distant hosts. Ideally, these should be non-archived, to point to the correct
message numbers of the main list archive (see
.BR ezmlm-send(1) .
You can use
.B ezmlm-make -C\fIezmlmsubrc
for this. If you don't, use the text files from the main list, except
.IR bounce-bottom .
Next, create
.I split
in the main list directory to achieve an appropriate split. Load splitting
between several local hosts is best achieved by hash, with a blank domain.
Geographical splitting with hosts in different countries is best done
via ``domain'' and naturally, a large domain can be subdivided by hash.
Subscribers will receive all messages 'From:' the main list. When they
subscribe or unsubscribe, the request will be forwarded to the appropriate
sublist, which will handle the confirmation. All information, except
.I bounce-bottom
refers the user to the main list. Thus, to the user the list appears as
a single list with the address of the main list, and distribution among
sublists is at the discretion of the administrator of the main list.
.SH "ADDING/REMOVING SUBLISTS"
In general, the main list should be disabled, while changing the sublist
split. This can be done by changing the mode of
.I dir\fB/lock
to 0 or by setting the sticky bit for the home directory of the user
controlling the list.
To remove a sublist, edit the lines for that sublist in the splitfile to
point to another list, and add the existing subscribers of the removed
sublist to the sublist taking the load.
When splitting a sublist into several sublists, create the new sublists,
and edit the split file to distribute the load
between them (usually by hash). Process the subscribers of the old list
with:
.Vb 1
| ezmlm-split -D dir | sort | program
.Ve
where to get one file of addresses per new sublist, ``program'' could be:
.Vb 12
\&#!/usr/bin/perl
\&while (<>) {
\& ($f,$t) = split (':');
\& $t =~ s/^\ //;
\& if ($f ne $of) {
\& $of = $f;
\& close(OUT) if ($of);
\& open(OUT,">$f") or die("Unable to open $f");
\& }
\& print OUT $t;
\&}
\&close(OUT) if ($of);
.Ve
Remove all subscribers from the old list,
and add the respective subscribers to each list.
For any more drastic reorganizations, collect all the subscribes of the
affected sublists, create the new subscriber lists, and update the
subscribers of the affected lists.
Reorganizations are easier done when lists use SQL support. By
temporarily using SQL support, reorganizations can be done on running
lists even when normally using
.B ezmlm-split
and local subscriber databases.
.SH "SEE ALSO"
ezmlm-list(1),
ezmlm-make(1),
ezmlm-manage(1),
ezmlm-sub(1)
ezmlm-unsub(1),
ezmlm(5),
ezmlmrc(5),
ezmlmsubrc(5)