Script Perl para consultas em base LDAP e/ou Active Directory

Script para consultar na base LDAP e/ou active directory dados de usuários feito em PERL.

[ Hits: 32.303 ]

Por: kleber povoação em 12/06/2006


Código



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 "[email protected]";

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 ("[email protected]$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 ";
}
Página anterior     Próxima página

Páginas do artigo
   1. Apresentação
   2. Código
   3. Finalização
Outros artigos deste autor

Remover vírus do Windows usando pendrive com Linux

Leitura recomendada

Perl e MySQL

Programando em Perl (parte 1)

Módulos CPAN no Debian e distros GNU/Linux em geral

URL amigável com Perl

Decodificando filmes do programa "3w player"

  
Comentários
[1] Comentário enviado por thelinux em 12/06/2006 - 15:56h

Rapaz. Bom tutorial. Parabéns.

[2] Comentário enviado por mundoguero em 12/06/2006 - 22:08h

Muito útil, parabéns!

[3] Comentário enviado por pmeggi em 19/11/2006 - 13:38h

Ola,

estou a precisar de criar uma script que efectue uma consulta no Active Directory, e encontrei o sue artigo, que em principio soluciona o meu problema, muito obrigada pelo artigo, realmente e' muito bom e util!

Mas ao testar o codigo tou a ter problemas...:(

Se fosse possivel dar uma ajudinha, agradecia muito.

O problema esta no bind. Ele conecta perfeitamente ao servidor, sem problemas. O bind anonimo tambem faz sem problemas. Mas nesse caso, quando tento fazer o search, ele da erro, dizendo que para efectuar o search e' necessario fazer um bind com sucesso. Nao entendo o pk desse erro. porque o bind nao da erro.

Alguma ideia que ajude por favor....

Cumprimentos

Pinki

[4] Comentário enviado por jeffersondantas em 12/04/2007 - 18:27h

EXCELENTE ARTIGO


Contribuir com comentário