ezmlm-split(1)ezmlm-split(1)NAMEezmlm-split - distribute (un)subscribe requests to sublists
SYNOPSISezmlm-split dir [ -dD ][ splitfile ]
DESCRIPTION
If the action is -subscribe or -unsubscribe, 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
splitfile (default is dir/split). If a match is found, the request is
forwarded to the corresponding sublist, and ezmlm-split exits 99. If
splitfile does not exist, a match is not found, or action is not -sub‐
scribe or -unsubscribe, ezmlm-split exits 0.
In 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.
ezmlm-split can be used also for list with SQL-based sublisting. In
this case, addresses matching the splitfile are forwarded to the
respective non-SQL sublist, and non-matching addresses are handed by
the SQL sublist.
If dir/qmqpservers exists, ezmlm-split will use qmail-qmqp(1) to send
messages.
OPTIONS-d (Default.) Do. Forward requests to the appropriate list.
-D Do not process messages. Rather, read addresses, one per line
from stdin, and print ``sublist@host: address'' where ``sub‐
list@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 sub‐
list handles.
SPLIT LIST SETUP
To use a hierarchy of sublists, set up the master list and add a ezmlm-
split line before the ezmlm-manage(1) line in dir/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 ezmlm-send(1). You can use
ezmlm-make -Cezmlmsubrc for this. If you don't, use the text files from
the main list, except bounce-bottom. Next, create 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 appro‐
priate sublist, which will handle the confirmation. All information,
except 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.
ADDING/REMOVING SUBLISTS
In general, the main list should be disabled, while changing the sub‐
list split. This can be done by changing the mode of dir/lock to 0 or
by setting the sticky bit for the home directory of the user control‐
ling 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 sub‐
list 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:
| ezmlm-split-D dir | sort | program
where to get one file of addresses per new sublist, ``program'' could
be:
#!/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);
Remove all subscribers from the old list, and add the respective sub‐
scribers to each list.
For any more drastic reorganizations, collect all the subscribes of the
affected sublists, create the new subscriber lists, and update the sub‐
scribers of the affected lists.
Reorganizations are easier done when lists use SQL support. By tempo‐
rarily using SQL support, reorganizations can be done on running lists
even when normally using ezmlm-split and local subscriber databases.
SEE ALSOezmlm-list(1), ezmlm-make(1), ezmlm-manage(1), ezmlm-sub(1) ezmlm-
unsub(1), ezmlm(5), ezmlmrc(5), ezmlmsubrc(5)ezmlm-split(1)