[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