All pastes #673378 Raw Edit

Anonym

public text v1 · immutable
#673378 ·published 2007-08-28 11:01 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;