Немножко о проблемке.. Есть почтовый сервак настроенный, кстати, по конфигу с этого сайта http://www.lissyara.su/?id=1173 (exim, dovecot, postfixadmin). Все работает правда под линухом, автору статьи и администрации сайта отдельное спасибо.
Так вот, появилась необходимость перенести информацию об учетных записях из mysql в openldap, ака address book для the bat. Первое что пришло в голову - скриптик на перле, потом вешаем задание в кроне - и все гут. При заведении новой учетной записи синхронизация по расписанию - все ок, по необходимости - обновление адресной книги в самом the bat.
С mysql проблем нет:
Код: Выделить всё
use Net::LDAP;
use Mysql;
$ldap = Net::LDAP->new('localhost') or die "$@";
$mesg = $ldap->bind ('cn=admin, dc=myorg, dc=ru', password => 'mypass' );
my $DNbranch = "ou=addressbook, dc=myorg, dc=ru";
$dbh = Mysql->Connect("localhost", "exim", "*", "*") or die print "can't connect";
$sth = $dbh->Query("SELECT username, name FROM mailbox where active=1") or die print "Can't prepare statement";
$sth->execute();
Код: Выделить всё
while ( my ($username, $name) = $sth->fetchrow_array()) {
#print " $username $name \n";
my ($username, $name) = $sth->fetchrow_array();
my $CreateArray = [
objectClass => [ "top", "person", "organizationalPerson", "inetOrgPerson" ],
cn => $name, #
uid => "0000001", # позже
sn => $name, # будет
mail => $username# исправляться..
];
my $NewDN = "@$CreateArray[2]=".
"@$CreateArray[3]+".
"@$CreateArray[4]=".
"@$CreateArray[5],".
$DNbranch;
my $result = LDAPentryCreate($ldap, $NewDN, $CreateArray);
sub LDAPentryCreate {
my ($ldap, $dn, $whatToCreate) = @_;
my $result = $ldap->add ( $dn, attrs => [ @$whatToCreate ] );
if ( $result->code ) {
LDAPerror ( "Searching", $result );
};
};
};
sub LDAPerror {
my ($from, $mesg) = @_;
print "Return code: ", $mesg->code;
print "\tMessage: ", $mesg->error_name;
print " :", $mesg->error_text;
print "MessageID: ", $mesg->mesg_id;
print "\tDN: ", $mesg->dn;
};
Код: Выделить всё
my $result = $ldap->add ( $dn, attrs => [ @$whatToCreate ] );
причем, когда убираем цикл и подставляем в $mycreatearray просто текстовые значения - все ок.
С перлом очень плохо знаком, делал по примерам, так что просьба сильно не пинать..