#!/usr/bin/perl # Written by Brad Marshall # Reads in spool file and creates lists # listname:list description:list password:list owner:list visibility:subscribe policy:unsubscribe policy:list reply:moderation:list archive:archive visibility:inital subscribers:ceiling posts:archive frequency $spool = "/var/spool/mailman/listcreate.txt"; $failedspool = "/var/spool/mailman/failed-listcreate.txt"; if (-e $spool) { open(SPOOL, "$spool") or die "Can't open $spool: $!\n"; while() { $line = $_; @ary = split(/::/, $line); #foreach $ent (@ary) { # # blah # print "$ent\n"; #} $config = "/var/spool/mailman/" . $ary[0] . ".config"; open(CONFIG, ">$config") or die "Can't open $config: $!\n"; print CONFIG "real_name = '$ary[0]'\n"; print CONFIG "description = '$ary[1]'\n"; print CONFIG "owner = ['$ary[3]']\n"; print CONFIG "advertised = $ary[4]\n"; print CONFIG "subscribe_policy = $ary[5]\n"; print CONFIG "unsubscribe_policy = $ary[6]\n"; print CONFIG "reply_goes_to_list = $ary[7]\n"; print CONFIG "default_member_moderation = $ary[8]\n"; print CONFIG "archive = $ary[9]\n"; print CONFIG "archive_private = $ary[10]\n"; print CONFIG "generic_nonmember_action = $ary[11]\n"; print CONFIG "max_num_recipients = $ary[13]\n"; print CONFIG "archive_volume_frequency = $ary[14]\n"; print CONFIG "max_message_size = $ary[15]\n"; print CONFIG "private_roster = 1\n"; close(CONFIG); $listname = $ary[0]; $listpass = $ary[2]; $listowner = $ary[3]; $subscribers = $ary[12]; # Create the lists $err = system("/usr/local/mailman/bin/newlist $listname $listowner $listpass"); if ($err) { logger("Can't create $listname"); next; } # Setup the list $err = system("/usr/local/mailman/bin/config_list -i $config $listname"); if ($err) { logger("Can't config $listname"); next; } system("rm $config"); # Add subscribers, if needed if ($subscribers ne '') { # deal with subscribers @subs = split(/\|/, $subscribers); $subfile = "/var/spool/mailman/" . $listname . ".txt"; open(SUB, ">$subfile") or die "Can't open $subfile: $!\n"; foreach $sub (@subs) { print SUB "$sub\n"; } close(SUB); $err = system("/usr/local/mailman/bin/add_members -r $subfile -w y -a n $listname"); if ($err) { logger("Can't add members to $listname"); next; } system("rm $subfile"); } } # Tidy up close(SPOOL); system("rm $spool"); } # Subroutines sub logger { $message = $_; print "$message"; open(FAILED, ">>$failedspool") or die "Can't open failed log: $!\n"; print FAILED $line; close(FAILED); }