#!/usr/bin/perl
#Пример иллюстрирует работу с хранилищем по протоколу Ldap, поиск шаблонов  в указанном хранилище.
use Net::LDAP; #Пакет необходимый для работы с LDAP. В стандартные пакеты Perl не входит.
use strict;

my  $ldap = Net::LDAP->new('192.168.7.36', port => 62222, version => 3) or die "$@";#получение контекста соединения с сервером по Ldap протоколу
my  $mesg = $ldap->bind(dn => '');#обращение к хранилтщу L (по умолчанию) в скобках писать не обязательно t=L
$mesg = $ldap->search(base => "", scope => 'sub', filter => "(userTemplate=*)");#Поиск шаблонов по Ldap дереву по указанным атрибутам и фильтру
$mesg->code && die $mesg->error;   #Проверка на наличие ошибок
my $max = $mesg->count;
printf("Count templates: %d\n",$max);
for(my $index = 0 ; $index < $max ; $index++) # проход по веткам
{
    my $entry = $mesg->entry($index);
    my $dn = $entry->dn;
    print $dn . "\n";
    my @attrs = $entry->attributes; # Получить атрибуты  ветки
    foreach my $var (@attrs) #проход по атрибутам ветки
    {
        my $attr = $entry->get_value($var, asref =>1);#получение атрибутов атрибута
        if( defined($attr) )
        {
            foreach my $value ( @$attr )     #проход по   атрибутам атрибута
            {
                if ($var eq 'userTemplate') #если это атрибут userTemplate'
                {
                    my $res=$ldap->extension(name => '1.3.6.1.4.1.6801.11.1.4', value => $value);#отправка $var на службу  1.3.6.1.4.1.6801.11.1.4 (Verify)
                    #Вместо строки 1.3.6.1.4.1.6801.11.1.4 можно ввести любую службу, например 1.3.6.1.4.1.6801.11.1.10(RA)  или  1.3.6.1.4.1.6801.11.1.0 (Echo)
                }
            }
        }
    }
}