|
|
|
ДНЕВНИКИ
Назад >>
Сергей ШИБКА
>>
Perl
23.03.2014 Active Directory и Perl
Подключение к домену на базе Win2008R2 AD из Perl.
Есть домен на базе Win2008R2 AD, его имя developer.com, IP адрес 192.168.101.2, необходимо получить список пользователей для дальнейшей обработки.
#!/usr/bin/perl
use Encode;
use locale;
use Net::LDAP;
print "Content-type: text/html \n\n";
print "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=windows-1251\">";
my $dc = '192.168.101.2';
my $user = 'deleguser@developer.com';
my $passwd = '1234567890';
my $basedn = 'dc=developer,dc=com';
my $scope = 'sub';
my $filter1 = '(&(objectClass=*) (samAccountName=ivar))';
my $filter2 = '(&(sAMAccountName=*) (sAMAccountType=805306368))';
### Подключение и авторизация в домене. Включен вывод на экран о
### состоянии и ошибках при подключении. Если всё нормально,
### вывод будет: 0 Success
my $ad = Net::LDAP->new($dc, version => 3) or die print "$@";
$mesg = $ad->bind($user, password=>$passwd) or die print "$@";
$C = $mesg->code;
$E = $mesg->error;
print "$C $E<br><br>";
###
### Производим поиск и подсчет по заданным параметрам фильтра.
### Включен вывод на экран о состоянии и ошибках при выборке
### фильтром. Если всё нормально, вывод будет: 0 Success
$searchobj = $ad->search(base => $basedn, scope=>$scope, filter => $filter2);
$C = $searchobj->code();
$E = $searchobj->error();
print "$C $E<br><br>";
my $count = $searchobj->count;
print "$count<br><br>";
###
### Вывод всех записей из AD. Необходим при отладке, чтобы знать
### названия параметров для создания фильтра. Для включения
### убираем знак # у строки #&DUMP; и в поиске
### меняем фильтр $filter2 на $filter1
sub DUMP {
foreach $entry ($searchobj->entries) { # Вывод всех записей из AD
$result = $entry->dump;
print "$result<br><br>";
}
}
#&DUMP;
###
### Перебираем полученный при поиске массив. Выводим из него нужные
### нам значения sn и givenName (имена и фамилии). Т.к. Все значения
### хранятся в utf8 я для своего удобства конвертирую в cp1251
### и кидаю в отдельный массив
foreach $entry ($searchobj->entries){
$name = $entry->get_value('sn');
$fname = $entry->get_value('givenName');
if ($name ne '' && $fname ne ''){
$User_AD = "$fname $name";
$User_AD = encode("cp1251", decode("utf8", $User_AD));
push (@ADU, $User_AD);
}
}
###
### Вывод готового списка пользователей из домена с сортировкой
### по алфавиту
foreach $adu (sort @ADU){
$cnt++;
print "$cnt # $adu<br>";
}
###
print "<br><br>end";
$ad->unbind;
# $dc IP адрес сервера
# $user Имя пользователя домена
# $passwd Пароль
# $basedn Имя домена
# $filter1 Фильтр для выборки всех записей пользователя ivar из домена
# $filter2 Фильтр для выборки всех записей пользователей из домена
Полученный результат будет иметь вид (обрезанный вывод списка):
0 Success
0 Success
397
1 # Bars E-178B
2 # EJabberd Server
3 # Kaskad 1C
4 # Kaspersky Security Center
5 # Konsultant Server
• комментарии (0)
[ Назад ]
|
|
|