[Madrid-pm] Resumen de Madrid-pm, Vol 57, Envío 1

deibyz deibyz en gmail.com
Mar Sep 20 09:12:43 PDT 2011


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...

Salu2,
D.

2011/9/20 David Barrientos J <bass.bj en gmail.com>

> 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:
>
> Bareword "LDAP_CONTROL_PAGED" not allowed while "strict subs" in use
>
> 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:
>
>  @args tiene el contenido que debe tener, lo he comprobado sobre la
> ejecución, ¿Te refieres a esto?
> 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:
>
> Net::LDAP::Search=HASH(0xdbe064)
> Net::LDAP=HASH(0xd391bc)
>
>
> El 20 de septiembre de 2011 13:18, <madrid-pm-request en pm.org> escribió:
>
>> Envíe los mensajes para la lista Madrid-pm a
>>        madrid-pm en pm.org
>>
>> Para subscribirse o anular su subscripción a través de la WEB
>>        http://mail.pm.org/mailman/listinfo/madrid-pm
>>
>> O por correo electrónico, enviando un mensaje con el texto "help" en
>> el asunto (subject) o en el cuerpo a:
>>        madrid-pm-request en pm.org
>>
>> Puede contactar con el responsable de la lista escribiendo a:
>>        madrid-pm-owner en pm.org
>>
>> Si responde a algún contenido de este mensaje, por favor, edite la
>> linea del asunto (subject) para que el texto sea mas especifico que:
>> "Re: Contents of Madrid-pm digest...". Además, por favor, incluya en
>> la respuesta sólo aquellas partes del mensaje a las que está
>> respondiendo.
>>
>>
>> Asuntos del día:
>>
>>   1. consulta masiva a directorio activo (David Barrientos J)
>>   2. Re: consulta masiva a directorio activo (Jorge Gonzalez)
>>
>>
>> ----------------------------------------------------------------------
>>
>> Message: 1
>> Date: Tue, 20 Sep 2011 12:43:22 +0200
>> From: David Barrientos J <bass.bj en gmail.com>
>> To: madrid-pm en pm.org
>> Subject: [Madrid-pm] consulta masiva a directorio activo
>> Message-ID:
>>        <CADC4WV70DHVrY70J=ABfvp4+oeM=
>> cmdS1nLJFsO9g8Lw1hYf2w en mail.gmail.com>
>> Content-Type: text/plain; charset="iso-8859-1"
>>
>> 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-0001.html
>> >
>>
>> ------------------------------
>>
>> Message: 2
>> Date: Tue, 20 Sep 2011 13:18:18 +0200
>> From: Jorge Gonzalez <jorge.gonzalez en daikon.es>
>> To: madrid-pm en pm.org
>> Subject: Re: [Madrid-pm] consulta masiva a directorio activo
>> Message-ID: <4E78767A.1050208 en daikon.es>
>> Content-Type: text/plain; charset="utf-8"; Format="flowed"
>>
>> 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.html
>> >
>>
>> ------------------------------
>>
>> _______________________________________________
>> Madrid-pm mailing list
>> Madrid-pm en pm.org
>> http://mail.pm.org/mailman/listinfo/madrid-pm
>>
>> Fin de Resumen de Madrid-pm, Vol 57, Envío 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/d5779418/attachment-0001.html>


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