среда, 23 сентября 2009 г.

Ldap из perl

Нашла примеры реализации тут:
http://docs.ysn.ru/perl-ldap/Net/LDAP/Examples.html

Моя цель - отправлять письмо пользователям о устаревании пароля. Последний таймстамп изменения пароля есть в атрибуте shadowLastChange в ldap профиле пользователя.

#!/usr/bin/perl

use warnings;
use strict;

use Net::LDAP;
use Mail::Mailer

sub LdapSearch {
my ($ldap,$searchString,$attrs,$base) = @_ ;
if (!$base ) { $base = "ou=people,dc=crtdev,dc=local"; }
if (!$attrs ) { $attrs = ['uid','shadowLastChange' ]; }
my $result = $ldap->search (
base => "$base",
scope => "sub",
filter => "$searchString",
attrs => $attrs
);

}

# получаем список пользователей и таймстамп последнего изменения пароля из ldap.
sub get_ldap_data{
my @Attrs = ();
my $ldap = Net::LDAP->new('ldaps://ldap.my.domain') or die "$@";
my $result = LdapSearch($ldap,"objectClass=shadowAccount",@Attrs); # фильтр - начилие класса shadowAccount

my @entries = $result->entries;
foreach my $entr (@entries){
my $useruid;
my $usert;
#my @attrs = sort $entr->attributes;
foreach my $attr ( sort $entr->attributes ){
#skip binary we can't handle
next if ( $attr =~ /;binary$/ );
if ($attr =~ /uid$/){
$useruid = $entr->get_value($attr);
} else {
if ($attr =~ /shadowLastChange/){
$usert = $entr->get_value($attr);
}
}
}
get_change_day(\$usert,\$useruid);
}
}

Комментариев нет: