#!/usr/bin/perl # Written by Brad Marshall # Dumps out lists and subscribers details for use in admin scripts $dir = "/usr/local/mailman/lists"; $lists = "/usr/local/mailman/.lists"; $subscribers = "/usr/local/mailman/.subscribers"; $listowners = "/usr/local/mailman/.listowners"; $tmplists = "/usr/local/mailman/.lists.tmp"; $tmpsubscribers = "/usr/local/mailman/.subscribers.tmp"; $tmplistowners = "/usr/local/mailman/.listowners.tmp"; open(LISTS, ">$tmplists") or die "Can't open $lists: $!\n"; opendir(DIRHANDLE, $dir) or die "couldn't open $dir : $!\n"; while (defined ($filename = readdir(DIRHANDLE)) ) { if (! ($filename =~ /\.\.?/)) { #print "$filename\n"; @list = `/usr/local/mailman/bin/list_members $filename`; chomp(@list); #print "@list\n"; $memb = join(",", @list); print LISTS "$filename:$memb\n"; } } close(LISTS); rename($tmplists,$lists); open(SUB, ">$tmpsubscribers") or die "Can't open $subscribers: $!\n"; open(LISTS, "$lists") or die "Can't open $lists for reading: $!\n"; while() { ($listname, $sub) = split(/:/); @subs = split(/,/,$sub); chomp(@subs); #print "@subs\n"; foreach $user (@subs) { push(@{$subscriber{$user}}, $listname); #print "$user - $listname\n"; } } foreach $user (keys(%subscriber)) { $lists = join(",", @{$subscriber{$user}}); #print "$lists\n"; print SUB "$user:$lists\n"; } rename($tmpsubscribers,$subscribers); open(LISTOWN, ">$tmplistowners") or die "Can't open $listowners: $!\n"; # List: all-students, Owners: helpdesk@cqu.edu.au @owners = `/usr/local/mailman/bin/list_admins -a`; foreach $own (@owners) { if ($own =~ /^List: (.*),\s*Owners: (.*)$/) { $list = $1; $owner = $2; print LISTOWN "$list:$owner\n"; #push(@{$listown{$owner}}, $list); } } close(LISTOWN); rename($tmplistowners, $listowners);