#!/usr/local/bin/perl
use Net::LDAP;
use IO::Socket;
my $ldap_server ='ldaps://XX.XX.XX.XX';
my $attrlist = ["cn","networkAddress"];
my $dn;
my $birthday="33.33.33";
my $passwd;
my %blist;
my %excess;
loadbirthdays("birthdays.lst");
$ldap = Net::LDAP->new( $ldap_server ) or die "$@";
print "Enter password for ADMIN: ";
$passwd = <STDIN>;
chomp($passwd);
$mesg = $ldap->bind("cn=ADMIN,ou=Adm,l=MSK,c=RU", password => "$passwd"); # authorized bind
# $mesg = $ldap->bind; # anonimous bind
$mesg->code && die $mesg->error;
$mesg = $ldap->search( # perform a search
base => "l=MSK,c=RU",
filter => "(&(objectclass=user)(cn=*))"
);
$mesg->code && die $mesg->error;
foreach $entry ($mesg->entries) {
$dn = $entry->dn;
if ($entry->get_value("loginDisabled") eq "TRUE") { next; }
$name = iso2win($entry->get_value(fullName));
if (length($name) < 2) { next; }
$birthday = getbirthday($name);
if ($birthday eq "0") {
$excess{$name} = $dn;
next;
};
print "$name \t\t $birthday\n";
$mesg = $ldap->modify($dn, replace => { "generationQualifier" => "$birthday" } );
# $mesg->code && die $mesg->error;
}
print "----------------------------------------------------------------\n";
$mesg = $ldap->unbind; # take down session
open (F, ">excess.log");
foreach $m (sort keys (%excess)) {
print F "$m [$excess{$m}]\n";
};
close F;
open (F, ">spare.log");
foreach $m (sort keys (%blist)) {
if (!($blist{$m} eq "X")) {
print F "$m [$blist{$m}]\n";
}
};
close F;
exit;
sub getbirthday {
my $nm = shift; # имя сотрудника
my $b;
$nm =~ tr/[а-я]ё/[А-Я]Ё/;
$nm =~ tr/Ё/Е/;
$nm =~ s/\s//g;
if (defined($blist{$nm})) {
$b = $blist{$nm};
$blist{$nm} = 'X';
$b =~ /(\d\d)\.(\d\d)\.(\d\d)(\d\d)/;
$b = "$1.$2.$4";
return $b;
}
return "0";
};
sub loadbirthdays {
my $fname = shift; # имя файла
my $a;
open(F,$fname);
while (defined($a=<F> )) {
chomp($a);
if ($a =~ /(.+)\s+(\d\d\.\d\d\.\d\d\d\d)/) {
my $n = $1;
my $b = $2;
$n =~ tr/[а-я]/[А-Я]/;
$n =~ tr/Ё/Е/;
$n =~ s/\s//g;
$blist{$n} = $b;
}
}
close F;
};
sub bin2str {
my $bin = shift;
my $res = "";
my ($a0,$a1,$a,$b,$c,$d) = unpack("C6", $bin);
$res="$a\.$b\.$c\.$d";
return $res;
};
sub iso2win {
$_[0]=~tr/\xD0\xD1//d; $_[0]=~tr/\x90-\xBF\x80-\x8f/\xC0-\xEF\xF0-\xFF/;
return $_[0]; }
Сейчас этот форум просматривают: Dick и гости: 208