En la linea previa a esa en la que no entras, hay una llamada a $ldap->search. Yo volcaría los argumentos de esa llamada para asegurarme de que realmente la llamada a $ldap->search devuelve algo. Quiza no entras porque la busqueda no devuelve resultados.

También te recomiendo que uses strict al principio del script, me ha parecido ver alguna variable no inicializada por ahi...

Slds
J.

El 20/09/11 12:43, David Barrientos J escribió:
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 <http://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';
}


_______________________________________________
Madrid-pm mailing list
[email protected]
http://mail.pm.org/mailman/listinfo/madrid-pm
_______________________________________________
Madrid-pm mailing list
[email protected]
http://mail.pm.org/mailman/listinfo/madrid-pm

Responder a