[Madrid-pm] consulta masiva a directorio activo

Jorge Gonzalez jorge.gonzalez en daikon.es
Mar Sep 20 04:18:18 PDT 2011


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
> Madrid-pm en pm.org
> http://mail.pm.org/mailman/listinfo/madrid-pm
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.pm.org/pipermail/madrid-pm/attachments/20110920/e77ad5fb/attachment-0001.html>


Más información sobre la lista de distribución Madrid-pm