#!/usr/bin/perl -w use Net::LDAP; my $listdir = "/home/julix/majord/lists"; #my $listdir = "/home/rzhome/unrz/majord/lists"; my $mlname = $ARGV[0]; my @members = (); my @mailzero = (); my %mailone = (); my %ambiquous =(); my %oneRecipient = (); my @externMembers = (); my %noUniqRecip = (); my %prefOriginator = (); my %noPrefOrig = (); my @newmembers = (); my $arg = @ARGV; if ($arg != 1) { print "Usage:\t$0 \\n"; exit 1; } if (!-e "$listdir/$mlname") { print "Mailinglist \"$mlname\" not found\n"; exit 1; } ######### open Majordomo-MailingList && write all Members in @members ######### open(LIST,"$listdir/$mlname") || die "$!\n"; foreach my $m () { chomp($m); push(@members,$m); } close(LIST); my $membersanz = @members; ######## mailEntry LDAP Search ######################################################## my $ldap = Net::LDAP->new('lde202.rrze.uni-erlangen.de', port => 400) or die "$@"; my $mesg = $ldap->bind('o=Universitaet Erlangen-Nuernberg,c=de', password => 'samaPizda'); foreach my $j (@members) { $mesg = $ldap->search( base => 'o=Universitaet Erlangen-Nuernberg,c=de', scope => 'sub', filter => "(preferredRfc822Recipient=$j)" ); my @entries = $mesg->entries; foreach my $entry (@entries) { if (!$entry->exists('mail')) { push (@noMailAtrMembers, $j); } } } foreach my $i (@members) { $mesg = $ldap->search( base => 'o=Universitaet Erlangen-Nuernberg,c=de', scope => 'sub', filter => "mail=$i", attrs => ['dn'] ); my $count = $mesg->count; if ($count == 0 ) { push(@mailzero, $i); } elsif ($count == 1) { my $entry = $mesg->entry(); my $dn = $entry->dn(); $mailone{$dn} = $i; } elsif ($count > 1) { my @doubleEntries = $mesg->entries; foreach my $doubleEntry (@doubleEntries) { $dnDouble = $doubleEntry->dn(); $ambiquous{$dnDouble} = $i; } } } ######## RecipientEntry Ldap Search ################################################## foreach my $r (@mailzero) { $mesg = $ldap->search( base => 'o=Universitaet Erlangen-Nuernberg,c=de', scope => 'sub', filter => "(preferredRfc822Recipient=$r)", attrs => ['preferredRfc822Recipient'] ); $count = $mesg->count; if ($count == 0) { push(@externMembers, $r); } elsif ($count == 1) { my $entry = $mesg->entry; $dn = $entry->dn(); $oneRecipient{$dn} = $r; } elsif ($count > 1) { my @doubleRecipients = $mesg->entries; foreach my $doubleRec (@doubleRecipients) { $recipientDouble = $doubleRec->dn(); $noUniqRecip{$recipientDouble} = $r; } } } ######### prefOriginator LDAP Search #################################################### %prefOriginator = (%mailone, %oneRecipient); my @base = keys(%prefOriginator); foreach my $b (@base) { my $filter = $prefOriginator{$b}; $mesg = $ldap->search( base => $b, scope => 'base', filter => "(preferredRfc822Originator=*)", attrs => ['preferredRfc822Originator'] ); $count = $mesg->count; if($count==0) { $noPrefOrig{$b} = $prefOriginator{$b}; } else { push(@newmembers,$prefOriginator{$b}) } } ######## OUTPUT & Files ################################################################################################# print "Summary:\n"; print "Majorodomo-mailinglist:\t\t$mlname\n"; print "Members:\t\t\t$membersanz\n"; ######## ExternMembers ########################################################### $externmembersanz = @externMembers; if($externmembersanz > 0) { open(EXTR, ">>$mlname.externmembers") || die $!; foreach my $e (@externMembers) { print EXTR "$e\n"; } print "ExternMembers:\t\t\t$externmembersanz check for details \"$mlname.externmembers\"\n"; } else { print "ExternMembers:\t\tnot found\n" } ######## NewMember ############################################################### my $newmembersanz = @newmembers; if($newmembersanz > 0) { open(NEWM,">>$mlname.newmembers") || die $!; foreach my $nm (@newmembers) { print NEWM "$nm\n"; } print "NewMembers:\t\t\t$newmembersanz check for details \"$mlname.newmembers\"\n"; } else { print "NewMembers:\t\tnot found\n"; } ######## NoPrefOriginator ####################################################### if( %noPrefOrig ne 0 ) { my @dn = keys %noPrefOrig; my $anz = @dn; open(WARNORIG,">>$mlname.noPrefOrig") || die $!; print WARNORIG"="x60; print WARNORIG"\n"; for (my $k = 0; $k<$anz; $k++) { print WARNORIG "WARNING:\tno prefOriginator\nmailinglist:\t$mlname\nmember:\t\t$noPrefOrig{$dn[$k]}\ndn:\t\t$dn[$k]\n"; print WARNORIG "-"x60; print WARNORIG "\n"; } close(WARNORIG); print "NoPrefOriginatorMembers:\t$anz check for details \"$mlname.noPrefOrig\"\n"; } else { print "NoPrefOriginatorMembers:\t\tnot found\n"; } close(NEWM); ####### AmbiquousMembes ####################################################### if(%ambiquous ne 0) { ####### AmbiquousMembersCount ######## my %rev_amb = reverse(%ambiquous); my @amb; foreach my $a (sort keys(%rev_amb)) { push(@amb, $a); } my $a = @amb; # Anzahl von AmbiquousMembers ###### Ausgabe ######################## my @dn = keys %ambiquous; my $anz = @dn; open (ERROR,">>$mlname.ambiquous") || die $!; print ERROR"="x60; print ERROR"\n"; for (my $k = 0; $k<$anz; $k++) { print ERROR "ERROR:\tambiquousmember\nmailinglist:\t$mlname\nmember:\t\t$ambiquous{$dn[$k]}\ndn:\t\t$dn[$k]\n"; print ERROR "-"x60; print ERROR "\n"; } close(ERROR); print "ambiquousMembers:\t$a check for details \"$mlname.ambiquous\"\n"; } else { print "ambiquousMembers:\t\tnot found\n"; } ####### NoUniqRecip ########################################################### if(%noUniqRecip ne 0) { my %rev_val = reverse(%noUniqRecip); my @noUniq; foreach my $val (sort keys(%rev_val)) { push(@noUniq, $val); } my $a = @noUniq; # Anzahl von NoUniqueRecipientMembers ####### Ausgabe ######################### my @dn = keys %noUniqRecip; my $anz = @dn; open (ERROR,">>$mlname.noUniqRecip") || die $!; print ERROR"="x60; print ERROR"\n"; for (my $k = 0; $k<$anz; $k++) { print ERROR "ERROR:\tnoUniqueRecipientMembers\nmailinglist:\t$mlname\nmember:\t\t$noUniqRecip{$dn[$k]}\ndn:\t\t$dn[$k]\n"; print ERROR "-"x60; print ERROR "\n"; } close(ERROR); print "noUniqueRecipientMembers:\t$a check for details \"$mlname.noUniqRecip\"\n"; } else { print "noUniqueRecipientMembers:\tnot found\n"; } ############ No Mail Atribut for Entry ############################################## my $noMailAtribut = @noMailAtrMembers; if ($noMailAtribut > 0) { open(WARNING,">>$mlname.NoLDAP_MailAtribut") || die $!; foreach my $k (@noMailAtrMembers) { print WARNING "$k\n"; } close(WARNING); print "NoLDAP_MailAtributMembers:\t$noMailAtribut check for details \"$mlname.NoLDAP_MailAtribut\"\n"; } else { print "NoLDAP_MailAtributMembers:\tnot found\n"; } ############### End ################################################################## print "="x30; print "\n"; $ldap->unbind; exit 0;