[Madrid-pm] consulta masiva a directorio activo
David Barrientos J
bass.bj en gmail.com
Mar Sep 20 03:43:22 PDT 2011
Hola! Os escribo para ver si alguien me puede echar una mano: Necesito hacer
un script que descargue de forma masiva ciertos datos de todos los usuarios
de un directorio activo de microsoft. Mi script se ejecuta asi:
./script.pl [fichero_configuracion] [dominio]
Primero, lee del fichero de configuracion sus dos lineas: Usuario, y
contraseña. Despues es donde viene el problema. En la parte de la
autenticación ( la linea que pongo en negrita ) no entra en el bucle, no
consulta ningun dato.
Esto es muy raro, el código de la función busca() , si lo pego en otro
script nuevo, sin funciones, y con la password y usuario en el fichero,
funciona todo perfecto. Tal y como esta.
Pero, al leer usuario y pass de un fichero y usar funciones, falla en la
consulta. Y he comprobado haciendo un print las variables usuario, password,
ldaps,que todos los valores los toma bien.
Y es que ya no se ni que mirar, no entiendo que me puede estar pasando, si
el codigo está bien!
¿Alguien me puede echar una mano?No sé , ¿Estoy haciendo algo mal?
Gracias, saludos!
#!c:\perl\bin\perl.exe -w
use 5.010;
use Net::LDAP;
use Net::LDAP::Control;
use Net::LDAP::Control::Paged;
use MIME::Base64;
use open qw(:utf8 :std);
my $siguiente = '0';
my $ldaps = "$ARGV[1]";
my $configuracion = "$ARGV[0]";
open CONFIG, q[<], "$configuracion" or die "No puedo leer el fichero de
configuracion $!";
open REPORTE, q[>], "reporteee.txt" or die "No puedo escribir el fichero
$ARGV[1].txt $!";
my $base = 'DC=espana5,DC=bankia,DC=corp';
sub conviertefecha{
my $fecha_desordenada = shift;
my @empieza = qw(0 4 6 8 10 12);
foreach my $comienzo(@empieza){
if ($cont == '1'){
$despiezando = substr($fecha_desordenada,$comienzo,4);
push(@array,$despiezando);
++$cont;next;
}
$despiezando = substr($fecha_desordenada,$comienzo,2);
$cont++;
push(@array,$despiezando);
}
$fecha_ordenada = "$f[2]/$f[1]/$f[0] $f[3]:$f[4]:$f[5]";
return $fecha_ordenada;
undef @array;
}
sub busca{
my ($us,$pass) = @_;
my $query = "cn=x0*";
say "$query";
my @attrs = qw(cn sAMAccountName memberof department);
say "defini arr";
my @args = ( base => $base,
#scope => 'sub',
filter => $query,
attrs => \@attrs,
control => [ $page ],
);
my $ldap = Net::LDAP->new($ldaps) or die "$!";
say "Conectando a $ldaps";
my $mesg = $ldap->bind($us, password =>$pass);
my $page = Net::LDAP::Control::Paged->new( size => 5000 ) or die "$!";
my $cookie;
say "$base-----$query------$page------$ldaps----$us----$pass--";
while(1){
say "Entre en while1";
$mesg = $ldap->search ( @args ) or die $!;
* while(my $entry = $mesg->shift_entry()){* ## Aqui no entra
say "Entre en while";
my $lastLogonTimestamp =
$entry->get_value('lastLogonTimestamp');
$lastLogonTimestamp = &conviertefecha($lastLogonTimestamp);
my $msdsuaccountctrl =
$entry->get_value('msds-user-account-control-computed');
my $departmento = $entry->get_value('department');
say REPORTE
"$lastLogonTimestamp,$msdsuaccountctrl,$departmento";
}
my ($resp) = $mesg->control(LDAP_CONTROL_PAGED) or last;
$cookie = $resp->cookie or last;
$page->cookie($cookie);
}
if ($cookie){
$page->cookie($cookie);
$page->size(0);
$ldap->search( @args );
}
$ldap->unbind;
}
unless ( @ARGV eq '2' ){
say "[SYNTAX ERROR]\n[INFO] ./$0 [fichero_configuracion] [dominio]";
exit(1);
}
while(my $linea=<CONFIG>){
chomp($linea);
if($siguiente eq '1'){
$passwd = $linea;
&busca($user,$passwd);
exit(0);
}
$user = $linea;
$siguiente = '1';
}
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.pm.org/pipermail/madrid-pm/attachments/20110920/636be65f/attachment.html>
Más información sobre la lista de distribución Madrid-pm