ezmlm-split(1)                                     ezmlm-split(1)


ezmlm-split - distribute (un)subscribe requests to sub- lists


ezmlm-split dir [ -dD ][ splitfile ]


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 succes- sive lines of splitfile (default is dir/split). If a match is found, the request is forwarded to the corre- sponding sublist, and ezmlm-split exits 99. If a match is not found or action is not -subscribe 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 for- mat ``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 sub- listing. 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.


-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 ``sublist@host'' is the address to which the request would have been forwarded in 1 ezmlm-split(1) ezmlm-split(1) normal operation. This is used to process a set of existing addresses into a set of address collec- tions, one per sublist. The output can be sorted and easily processed into a set of files, one per sublist containing the addresses that sublist han- dles.


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-bot- tom. Next, create split in the main list directory to achieve an appropriate split. Load splitting between sev- eral 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 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 chang- ing the sublist 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 controlling the list. To remove a sublist, edit the lines for that sublist in the splitfile to point to another list, and add the exist- ing subscribers of the removed sublist to the sublist tak- ing the load. When splitting a sublist into several sub- lists, create the new sublists, and edit the split file to distribute the load between them (usually by hash). Pro- cess the subscribers of the old list with: | ezmlm-split -D dir | sort | program where to get one file of addresses per new sublist, ``pro- gram'' could be: 2 ezmlm-split(1) ezmlm-split(1) #!/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 subscribers to each list. For any more drastic reorganizations, collect all the sub- scribes of the affected sublists, create the new sub- scriber lists, and update the subscribers of the affected lists. Reorganizations are easier done when lists use SQL sup- port. By temporarily using SQL support, reorganizations can be done on running lists even when normally using ezmlm-split and local subscriber databases.


ezmlm-list(1), ezmlm-make(1), ezmlm-manage(1), ezmlmsub(1) ezmlm-unsub(1), ezmlm(5), ezmlmrc(5), ezmlmsubrc(5) 3

1994 Man-cgi 1.15, Panagiotis Christias <christia@theseas.ntua.gr>