Agora vamos ao código comentado:
use warnings;
use strict;
use Net::LDAP;#Esta linha carrega as funções do Perl com suporte LDAP
©rights; #Muito importante essa linha
my $SERVIDOR="SERVER"; #Nome do nosso servidor
my $BASE="dc=meudominio,dc=com,dc=br"; #Olha o nosso domínio aqui ou tecnicamente nosso DN=Distinguished Name
my $ATRIBUTOS="lockoutTime,sAMAccountName,description,cn"; #Aqui estão todos os campos que eu quero que traga na consulta, no meu caso eu quero os campos
cn=common name
description=traz uma descrição do usuário
sAMAccountName=O nome real do usuário no Active directory
lockoutTime=me traz o tempo que o usuário já esta bloqueado no sistema
my $FILTRO="cn"; #Aqui é o filtro que eu vou usar na pesquisa, no caso eu vou procurar pelo nome do usuário
my $ldap = Net::LDAP->new( "$SERVIDOR" ) or die "$@";
print "Digite o usuário a ser localizado : ";
chop(my $user=<STDIN>);
my $mesg=$ldap->bind;
#ESTA LINHA ACIMA CONECTA-SE NO SERVIDOR PARA FAZER UMA CONSULTA ANÔNIMA, OU SEJA, CONECTA-SE SEM USUÁRIO E SENHA UTILIZANDO PORTA 389. OBS: POR PADRÃO O ACTIVE DIRECTORY NÃO ACEITA CONSULTAS ANONIMAS. SE PRECISAR DE CONSULTA COM USUÁRIO E SENHA UTILIZE A SEGUINTE LINHA:
my $mesg=$ldap->bind ("meu_usuario@$SERVIDOR", password=>"minha_senha");
SUBSTITUINDO-SE MEU_USUÁRIO PELO SEU USUÁRIO E MINHA_SENHA POR SUA SENHA
CUIDADO, AS SENHAS SÃO PASSADAS EM PLAIN TEXT PELA REDE, ENTÃO NESSE CASO UTILIZE O NET::LDAPS DO PACOTE PERL-LDAP O QUAL OFERECE COMUNICAÇÃO SEGURA PELA PORTA 636. MAIS INFORMAÇÕES SOBRE NET::LDAPS VEJA OS LINKS NO FINAL DO ARTIGO.
$mesg = $ldap->search( base=>"$BASE",filter=>"$FILTRO=*$user*",attrs=>"$ATRIBUTOS"); #A pesquisa usando todos critérios acima
$mesg->code && die $mesg->error;
my $count = $mesg->count;#Estamos contando qtos usuários foram localizados
for (my $i=0; $i<$count; $i++)
{
my $entry = $mesg->entry($i); #pegamos um usuário e atribuímos à variável entry
my $lockado=int($entry->get_value('lockoutTime')); #Atribuição do valor de lockoutTime a variável lockado
#Impressão dos dados na tela. Quais dados ? Os ATRIBUTOS do inicio do programa
print "Nome : ",$entry->get_value('cn'),"
",
"Descrição : ",$entry->get_value('description'),"
",
"Usuário : ",$entry->get_value('sAMAccountName'),"
";
if ($lockado == 0 ) #Verificação se usuário esta bloqueado. Se tiver valor igual a 0 usuário não esta lockado.
{
$lockado="Não";
print "Usuário bloqueado ?: ",$lockado;
}
else
{
$lockado="Sim";
print "Usuário bloqueado ?: ",$lockado;
}
print "
--------------------------
";
my $lixo=<STDIN>;
}
$mesg = $ldap->unbind; # derrubar conexão
sub copyrights
{
print "Copyright 2006, 2006 Kleber Povoacao
kleber at gmail.com
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
";
}