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: 33.999 ]

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 "$@";

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 ";
}
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

Executando os principais frameworks Perl no cPanel com CGI

Gerenciando redes com Perl e SNMP

Programando uma Intranet com Apache, MySQL e Perl (parte 1)

Enviando emails em Perl

Instalação de MRTG em ambiente Windows

  
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




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts