Creo que para poder utilizar la constante LDAP_CONTROL_PAGED (cualquier constante LDAP en general) tienes que poner un "use Net::LDAP::Constant" al principio también...<br><br>Salu2,<br>D.<br><br><div class="gmail_quote">
2011/9/20 David Barrientos J <span dir="ltr"><<a href="mailto:bass.bj@gmail.com">bass.bj@gmail.com</a>></span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
Estoy un poco perdido con todo esto. He intentado ponerle strict ( aunque no seria la solución, tal vez podría darme una idea de donde estoy fallando ), pero no puedo ponerlo, me da el siguiente error:<br><br>Bareword "LDAP_CONTROL_PAGED" not allowed while "strict subs" in use<br>


<br>En cuanto a lo que me comentas de volcar los argumentos de la llamada $mesg = $ldap->search ( @args ) or die $!;, no se si te estoy entendiendo bien:<br><br> @args tiene el contenido que debe tener, lo he comprobado sobre la ejecución, ¿Te refieres a esto?<br>


No soy un guru con perl(aún :) ),no sé si podría mirar de alguna forma los contenidos de $mesg y $ldap, son referencias y no sé cómo acceder a los datos en si, claro, al hacer un print $mesg o print $ldap, obtengo esto:<br>


<br>Net::LDAP::Search=HASH(0xdbe064)<br>Net::LDAP=HASH(0xd391bc)<br><br><br><div class="gmail_quote">El 20 de septiembre de 2011 13:18,  <span dir="ltr"><<a href="mailto:madrid-pm-request@pm.org" target="_blank">madrid-pm-request@pm.org</a>></span> escribió:<br>


<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Envíe los mensajes para la lista Madrid-pm a<br>
        <a href="mailto:madrid-pm@pm.org" target="_blank">madrid-pm@pm.org</a><br>
<br>
Para subscribirse o anular su subscripción a través de la WEB<br>
        <a href="http://mail.pm.org/mailman/listinfo/madrid-pm" target="_blank">http://mail.pm.org/mailman/listinfo/madrid-pm</a><br>
<br>
O por correo electrónico, enviando un mensaje con el texto "help" en<br>
el asunto (subject) o en el cuerpo a:<br>
        <a href="mailto:madrid-pm-request@pm.org" target="_blank">madrid-pm-request@pm.org</a><br>
<br>
Puede contactar con el responsable de la lista escribiendo a:<br>
        <a href="mailto:madrid-pm-owner@pm.org" target="_blank">madrid-pm-owner@pm.org</a><br>
<br>
Si responde a algún contenido de este mensaje, por favor, edite la<br>
linea del asunto (subject) para que el texto sea mas especifico que:<br>
"Re: Contents of Madrid-pm digest...". Además, por favor, incluya en<br>
la respuesta sólo aquellas partes del mensaje a las que está<br>
respondiendo.<br>
<br>
<br>
Asuntos del día:<br>
<br>
   1. consulta masiva a directorio activo (David Barrientos J)<br>
   2. Re: consulta masiva a directorio activo (Jorge Gonzalez)<br>
<br>
<br>
----------------------------------------------------------------------<br>
<br>
Message: 1<br>
Date: Tue, 20 Sep 2011 12:43:22 +0200<br>
From: David Barrientos J <<a href="mailto:bass.bj@gmail.com" target="_blank">bass.bj@gmail.com</a>><br>
To: <a href="mailto:madrid-pm@pm.org" target="_blank">madrid-pm@pm.org</a><br>
Subject: [Madrid-pm] consulta masiva a directorio activo<br>
Message-ID:<br>
        <CADC4WV70DHVrY70J=ABfvp4+oeM=<a href="mailto:cmdS1nLJFsO9g8Lw1hYf2w@mail.gmail.com" target="_blank">cmdS1nLJFsO9g8Lw1hYf2w@mail.gmail.com</a>><br>
Content-Type: text/plain; charset="iso-8859-1"<br>
<br>
Hola! Os escribo para ver si alguien me puede echar una mano: Necesito hacer<br>
un script que descargue de forma masiva ciertos datos de todos los usuarios<br>
de un directorio activo de microsoft. Mi script se ejecuta asi:<br>
<br>
./<a href="http://script.pl" target="_blank">script.pl</a> [fichero_configuracion] [dominio]<br>
<br>
Primero, lee del fichero de configuracion sus dos lineas: Usuario, y<br>
contraseña. Despues es donde viene el problema. En la parte de la<br>
autenticación ( la linea que pongo en negrita ) no entra en el bucle, no<br>
consulta ningun dato.<br>
Esto es muy raro, el código de la función busca() , si lo pego en otro<br>
script nuevo, sin funciones, y con la password y usuario en el fichero,<br>
funciona todo perfecto. Tal y como esta.<br>
Pero, al leer usuario y pass de un fichero y usar funciones, falla en la<br>
consulta. Y he comprobado haciendo un print las variables usuario, password,<br>
ldaps,que todos los valores los toma bien.<br>
<br>
Y es que ya no se ni que mirar, no entiendo que me puede estar pasando, si<br>
el codigo está bien!<br>
¿Alguien me puede echar una mano?No sé , ¿Estoy haciendo algo mal?<br>
<br>
Gracias, saludos!<br>
<br>
#!c:\perl\bin\perl.exe -w<br>
<br>
use 5.010;<br>
use Net::LDAP;<br>
use Net::LDAP::Control;<br>
use Net::LDAP::Control::Paged;<br>
use MIME::Base64;<br>
use open qw(:utf8 :std);<br>
<br>
my $siguiente = '0';<br>
my $ldaps = "$ARGV[1]";<br>
my $configuracion = "$ARGV[0]";<br>
open CONFIG, q[<], "$configuracion" or die "No puedo leer el fichero de<br>
configuracion $!";<br>
open REPORTE, q[>], "reporteee.txt" or die "No puedo escribir el fichero<br>
$ARGV[1].txt $!";<br>
my $base = 'DC=espana5,DC=bankia,DC=corp';<br>
<br>
sub conviertefecha{<br>
    my $fecha_desordenada = shift;<br>
    my @empieza = qw(0 4 6 8 10 12);<br>
    foreach my $comienzo(@empieza){<br>
        if ($cont == '1'){<br>
            $despiezando = substr($fecha_desordenada,$comienzo,4);<br>
            push(@array,$despiezando);<br>
            ++$cont;next;<br>
        }<br>
        $despiezando = substr($fecha_desordenada,$comienzo,2);<br>
        $cont++;<br>
        push(@array,$despiezando);<br>
    }<br>
    $fecha_ordenada = "$f[2]/$f[1]/$f[0] $f[3]:$f[4]:$f[5]";<br>
    return $fecha_ordenada;<br>
    undef @array;<br>
}<br>
sub busca{<br>
    my ($us,$pass) = @_;<br>
    my $query = "cn=x0*";<br>
    say "$query";<br>
    my @attrs = qw(cn sAMAccountName memberof department);<br>
    say "defini arr";<br>
    my @args = ( base => $base,<br>
                 #scope => 'sub',<br>
                 filter => $query,<br>
                 attrs => \@attrs,<br>
                 control => [ $page ],<br>
                );<br>
    my $ldap = Net::LDAP->new($ldaps) or die "$!";<br>
    say "Conectando a $ldaps";<br>
    my $mesg = $ldap->bind($us, password =>$pass);<br>
    my $page = Net::LDAP::Control::Paged->new( size => 5000 ) or die "$!";<br>
    my $cookie;<br>
    say "$base-----$query------$page------$ldaps----$us----$pass--";<br>
    while(1){<br>
    say "Entre en while1";<br>
        $mesg = $ldap->search ( @args ) or die $!;<br>
       * while(my $entry = $mesg->shift_entry()){* ## Aqui no entra<br>
        say "Entre en while";<br>
            my $lastLogonTimestamp =<br>
$entry->get_value('lastLogonTimestamp');<br>
            $lastLogonTimestamp = &conviertefecha($lastLogonTimestamp);<br>
            my $msdsuaccountctrl =<br>
$entry->get_value('msds-user-account-control-computed');<br>
            my $departmento = $entry->get_value('department');<br>
            say REPORTE<br>
"$lastLogonTimestamp,$msdsuaccountctrl,$departmento";<br>
        }<br>
        my ($resp) = $mesg->control(LDAP_CONTROL_PAGED) or last;<br>
        $cookie = $resp->cookie or last;<br>
        $page->cookie($cookie);<br>
    }<br>
    if ($cookie){<br>
        $page->cookie($cookie);<br>
        $page->size(0);<br>
        $ldap->search( @args );<br>
    }<br>
    $ldap->unbind;<br>
}<br>
unless ( @ARGV eq '2' ){<br>
    say "[SYNTAX ERROR]\n[INFO] ./$0 [fichero_configuracion] [dominio]";<br>
    exit(1);<br>
}<br>
while(my $linea=<CONFIG>){<br>
    chomp($linea);<br>
    if($siguiente eq '1'){<br>
        $passwd = $linea;<br>
        &busca($user,$passwd);<br>
        exit(0);<br>
    }<br>
    $user = $linea;<br>
    $siguiente = '1';<br>
}<br>
------------ próxima parte ------------<br>
Se ha borrado un adjunto en formato HTML...<br>
URL: <<a href="http://mail.pm.org/pipermail/madrid-pm/attachments/20110920/636be65f/attachment-0001.html" target="_blank">http://mail.pm.org/pipermail/madrid-pm/attachments/20110920/636be65f/attachment-0001.html</a>><br>



<br>
------------------------------<br>
<br>
Message: 2<br>
Date: Tue, 20 Sep 2011 13:18:18 +0200<br>
From: Jorge Gonzalez <<a href="mailto:jorge.gonzalez@daikon.es" target="_blank">jorge.gonzalez@daikon.es</a>><br>
To: <a href="mailto:madrid-pm@pm.org" target="_blank">madrid-pm@pm.org</a><br>
Subject: Re: [Madrid-pm] consulta masiva a directorio activo<br>
Message-ID: <<a href="mailto:4E78767A.1050208@daikon.es" target="_blank">4E78767A.1050208@daikon.es</a>><br>
Content-Type: text/plain; charset="utf-8"; Format="flowed"<br>
<br>
En la linea previa a esa en la que no entras, hay una llamada a<br>
$ldap->search. Yo volcaría los argumentos de esa llamada para asegurarme<br>
de que realmente la llamada a $ldap->search devuelve algo. Quiza no<br>
entras porque la busqueda no devuelve resultados.<br>
<br>
También te recomiendo que uses strict al principio del script, me ha<br>
parecido ver alguna variable no inicializada por ahi...<br>
<br>
Slds<br>
J.<br>
<br>
El 20/09/11 12:43, David Barrientos J escribió:<br>
> Hola! Os escribo para ver si alguien me puede echar una mano: Necesito<br>
> hacer un script que descargue de forma masiva ciertos datos de todos<br>
> los usuarios de un directorio activo de microsoft. Mi script se<br>
> ejecuta asi:<br>
><br>
> ./<a href="http://script.pl" target="_blank">script.pl</a> <<a href="http://script.pl" target="_blank">http://script.pl</a>> [fichero_configuracion] [dominio]<br>
><br>
> Primero, lee del fichero de configuracion sus dos lineas: Usuario, y<br>
> contraseña. Despues es donde viene el problema. En la parte de la<br>
> autenticación ( la linea que pongo en negrita ) no entra en el bucle,<br>
> no consulta ningun dato.<br>
> Esto es muy raro, el código de la función busca() , si lo pego en otro<br>
> script nuevo, sin funciones, y con la password y usuario en el<br>
> fichero, funciona todo perfecto. Tal y como esta.<br>
> Pero, al leer usuario y pass de un fichero y usar funciones, falla en<br>
> la consulta. Y he comprobado haciendo un print las variables usuario,<br>
> password, ldaps,que todos los valores los toma bien.<br>
><br>
> Y es que ya no se ni que mirar, no entiendo que me puede estar<br>
> pasando, si el codigo está bien!<br>
> ¿Alguien me puede echar una mano?No sé , ¿Estoy haciendo algo mal?<br>
><br>
> Gracias, saludos!<br>
><br>
> #!c:\perl\bin\perl.exe -w<br>
><br>
> use 5.010;<br>
> use Net::LDAP;<br>
> use Net::LDAP::Control;<br>
> use Net::LDAP::Control::Paged;<br>
> use MIME::Base64;<br>
> use open qw(:utf8 :std);<br>
><br>
> my $siguiente = '0';<br>
> my $ldaps = "$ARGV[1]";<br>
> my $configuracion = "$ARGV[0]";<br>
> open CONFIG, q[<], "$configuracion" or die "No puedo leer el fichero<br>
> de configuracion $!";<br>
> open REPORTE, q[>], "reporteee.txt" or die "No puedo escribir el<br>
> fichero $ARGV[1].txt $!";<br>
> my $base = 'DC=espana5,DC=bankia,DC=corp';<br>
><br>
> sub conviertefecha{<br>
>     my $fecha_desordenada = shift;<br>
>     my @empieza = qw(0 4 6 8 10 12);<br>
>     foreach my $comienzo(@empieza){<br>
>         if ($cont == '1'){<br>
>             $despiezando = substr($fecha_desordenada,$comienzo,4);<br>
>             push(@array,$despiezando);<br>
>             ++$cont;next;<br>
>         }<br>
>         $despiezando = substr($fecha_desordenada,$comienzo,2);<br>
>         $cont++;<br>
>         push(@array,$despiezando);<br>
>     }<br>
>     $fecha_ordenada = "$f[2]/$f[1]/$f[0] $f[3]:$f[4]:$f[5]";<br>
>     return $fecha_ordenada;<br>
>     undef @array;<br>
> }<br>
> sub busca{<br>
>     my ($us,$pass) = @_;<br>
>     my $query = "cn=x0*";<br>
>     say "$query";<br>
>     my @attrs = qw(cn sAMAccountName memberof department);<br>
>     say "defini arr";<br>
>     my @args = ( base => $base,<br>
>                  #scope => 'sub',<br>
>                  filter => $query,<br>
>                  attrs => \@attrs,<br>
>                  control => [ $page ],<br>
>                 );<br>
>     my $ldap = Net::LDAP->new($ldaps) or die "$!";<br>
>     say "Conectando a $ldaps";<br>
>     my $mesg = $ldap->bind($us, password =>$pass);<br>
>     my $page = Net::LDAP::Control::Paged->new( size => 5000 ) or die "$!";<br>
>     my $cookie;<br>
>     say "$base-----$query------$page------$ldaps----$us----$pass--";<br>
>     while(1){<br>
>     say "Entre en while1";<br>
>         $mesg = $ldap->search ( @args ) or die $!;<br>
> *while(my $entry = $mesg->shift_entry()){* ## Aqui no entra<br>
>         say "Entre en while";<br>
>             my $lastLogonTimestamp =<br>
> $entry->get_value('lastLogonTimestamp');<br>
>             $lastLogonTimestamp = &conviertefecha($lastLogonTimestamp);<br>
>             my $msdsuaccountctrl =<br>
> $entry->get_value('msds-user-account-control-computed');<br>
>             my $departmento = $entry->get_value('department');<br>
>             say REPORTE<br>
> "$lastLogonTimestamp,$msdsuaccountctrl,$departmento";<br>
>         }<br>
>         my ($resp) = $mesg->control(LDAP_CONTROL_PAGED) or last;<br>
>         $cookie = $resp->cookie or last;<br>
>         $page->cookie($cookie);<br>
>     }<br>
>     if ($cookie){<br>
>         $page->cookie($cookie);<br>
>         $page->size(0);<br>
>         $ldap->search( @args );<br>
>     }<br>
>     $ldap->unbind;<br>
> }<br>
> unless ( @ARGV eq '2' ){<br>
>     say "[SYNTAX ERROR]\n[INFO] ./$0 [fichero_configuracion] [dominio]";<br>
>     exit(1);<br>
> }<br>
> while(my $linea=<CONFIG>){<br>
>     chomp($linea);<br>
>     if($siguiente eq '1'){<br>
>         $passwd = $linea;<br>
> &busca($user,$passwd);<br>
>         exit(0);<br>
>     }<br>
>     $user = $linea;<br>
>     $siguiente = '1';<br>
> }<br>
><br>
><br>
> _______________________________________________<br>
> Madrid-pm mailing list<br>
> <a href="mailto:Madrid-pm@pm.org" target="_blank">Madrid-pm@pm.org</a><br>
> <a href="http://mail.pm.org/mailman/listinfo/madrid-pm" target="_blank">http://mail.pm.org/mailman/listinfo/madrid-pm</a><br>
------------ próxima parte ------------<br>
Se ha borrado un adjunto en formato HTML...<br>
URL: <<a href="http://mail.pm.org/pipermail/madrid-pm/attachments/20110920/e77ad5fb/attachment.html" target="_blank">http://mail.pm.org/pipermail/madrid-pm/attachments/20110920/e77ad5fb/attachment.html</a>><br>
<br>
------------------------------<br>
<br>
_______________________________________________<br>
Madrid-pm mailing list<br>
<a href="mailto:Madrid-pm@pm.org" target="_blank">Madrid-pm@pm.org</a><br>
<a href="http://mail.pm.org/mailman/listinfo/madrid-pm" target="_blank">http://mail.pm.org/mailman/listinfo/madrid-pm</a><br>
<br>
Fin de Resumen de Madrid-pm, Vol 57, Envío 1<br>
********************************************<br>
</blockquote></div><br>
<br>_______________________________________________<br>
Madrid-pm mailing list<br>
<a href="mailto:Madrid-pm@pm.org">Madrid-pm@pm.org</a><br>
<a href="http://mail.pm.org/mailman/listinfo/madrid-pm" target="_blank">http://mail.pm.org/mailman/listinfo/madrid-pm</a><br></blockquote></div><br>