rendered paste body#!/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 \<mailinglist\>\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 (<LIST>)
{
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;