All pastes #673275 Raw Edit

Anonym

public text v1 · immutable
#673275 ·published 2007-08-28 08:39 UTC
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;