Communigate и eDir

Всем привет!
Стоит необходимость установить CGPro и привязать аутентификацию к еДиру.
Почитал на форуме, установил, прикрутил перловый скрипт от Communigate, поправил
малость - заработало, а конкретнее - пользователи новые в CGPro создаются, в лдапе авторизуются.
Вопрос в удалении тех, которых в еДире нет. Взял скрипт по ссылке на форуме (для АД) поковырял, но результата толкового не добился. А именно - не удаляет аккаунты. Я вообще не спец в перле, помогите плиз.
И еще пара вопросов - можно ли прикрутить аутентификацию в Радиусе и локально на линуксе (pam?..). Если да, то как.
Вот скрипт удаления.
#!/usr/bin/perl -w
use CLI;
use Net::LDAP;
my $Domain = 'testdomain.ru'; # Read the domain name from standard input
my $CGServerAddress = '192.168.62.4';
my $Login = 'postmaster';
my $Password = '111';
my $cli = new CGP::CLI( { PeerAddr => $CGServerAddress,
PeerPort => 106,
login => $Login,
password => $Password } )
|| die "Can't login to CGPro: ".$CGP::ERR_STRING."\n";
@special=("public", "dilest"); #Array of undeleted accounts
my $LDAPServerAddress = '192.168.62.3'; # You should redefine these values
my $LDAPAdminDN = 'cn=admin,o=cont';
my $LDAPAdminPassword = '12345';
my $LDAPSearchBase = 'o=cont';
my $accountList = $cli->ListAccounts($Domain);
die "\nError " . $cli->getErrMessage . "(".$cli->getErrCode.
") fetching accounts list\n"
unless ($accountList);
#Create array of accounts
$i=0;
foreach (keys %$accountList) {
$accounts[$i]=$_;
++$i;
};
# Delete special accounts from array of accounts
$i=0;
$j=0;
foreach (@special) {
foreach (@accounts) {
if ($accounts[$i] eq $special[$j])
{splice (@accounts, $i, 1);}
++$i;
}
++$j;
$i=0;
}
my $ldap = Net::LDAP->new($LDAPServerAddress,port=>389,timeout=>20)
|| return "Can't connect to $LDAPServerAddress via LDAP";
my $result=$ldap->bind($LDAPAdminDN,password=>$LDAPAdminPassword)
|| return "Can't bind:".$result->error;
open(MAIL,"|/usr/bin/mail -s Account_Removing postmaster"); #mail postmaster(use cgp mailer)
print MAIL "Following CGP Accounts were remove:\n\n";
foreach (@accounts) {
my $mesg = $ldap->search ( # perform a search
base => $LDAPSearchBase, #"cn=$domain",
filter => "(&(cn=$_)(objectclass=*))"
);
if ($mesg->count==0)
{
#print MAIL "$_\n"; #print accounts for testing purposes only
$cli->DeleteAccount("$_\@$Domain") #delete accounts from cgp domain
|| die "Can't delete: ".$cli->getErrMessage.", quitting";
}
}
close(MAIL);
$ldap->unbind(); # unbind & disconnect
$cli->Logout;
Стоит необходимость установить CGPro и привязать аутентификацию к еДиру.
Почитал на форуме, установил, прикрутил перловый скрипт от Communigate, поправил
малость - заработало, а конкретнее - пользователи новые в CGPro создаются, в лдапе авторизуются.
Вопрос в удалении тех, которых в еДире нет. Взял скрипт по ссылке на форуме (для АД) поковырял, но результата толкового не добился. А именно - не удаляет аккаунты. Я вообще не спец в перле, помогите плиз.
И еще пара вопросов - можно ли прикрутить аутентификацию в Радиусе и локально на линуксе (pam?..). Если да, то как.
Вот скрипт удаления.
#!/usr/bin/perl -w
use CLI;
use Net::LDAP;
my $Domain = 'testdomain.ru'; # Read the domain name from standard input
my $CGServerAddress = '192.168.62.4';
my $Login = 'postmaster';
my $Password = '111';
my $cli = new CGP::CLI( { PeerAddr => $CGServerAddress,
PeerPort => 106,
login => $Login,
password => $Password } )
|| die "Can't login to CGPro: ".$CGP::ERR_STRING."\n";
@special=("public", "dilest"); #Array of undeleted accounts
my $LDAPServerAddress = '192.168.62.3'; # You should redefine these values
my $LDAPAdminDN = 'cn=admin,o=cont';
my $LDAPAdminPassword = '12345';
my $LDAPSearchBase = 'o=cont';
my $accountList = $cli->ListAccounts($Domain);
die "\nError " . $cli->getErrMessage . "(".$cli->getErrCode.
") fetching accounts list\n"
unless ($accountList);
#Create array of accounts
$i=0;
foreach (keys %$accountList) {
$accounts[$i]=$_;
++$i;
};
# Delete special accounts from array of accounts
$i=0;
$j=0;
foreach (@special) {
foreach (@accounts) {
if ($accounts[$i] eq $special[$j])
{splice (@accounts, $i, 1);}
++$i;
}
++$j;
$i=0;
}
my $ldap = Net::LDAP->new($LDAPServerAddress,port=>389,timeout=>20)
|| return "Can't connect to $LDAPServerAddress via LDAP";
my $result=$ldap->bind($LDAPAdminDN,password=>$LDAPAdminPassword)
|| return "Can't bind:".$result->error;
open(MAIL,"|/usr/bin/mail -s Account_Removing postmaster"); #mail postmaster(use cgp mailer)
print MAIL "Following CGP Accounts were remove:\n\n";
foreach (@accounts) {
my $mesg = $ldap->search ( # perform a search
base => $LDAPSearchBase, #"cn=$domain",
filter => "(&(cn=$_)(objectclass=*))"
);
if ($mesg->count==0)
{
#print MAIL "$_\n"; #print accounts for testing purposes only
$cli->DeleteAccount("$_\@$Domain") #delete accounts from cgp domain
|| die "Can't delete: ".$cli->getErrMessage.", quitting";
}
}
close(MAIL);
$ldap->unbind(); # unbind & disconnect
$cli->Logout;