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

Jorge Gonzalez jorge.gonzalez en daikon.es
Mar Sep 20 05:37:05 PDT 2011


Vale, aqui va con un poco mas de detalle:

Lo del strict: poner al principio del script la linea "use strict;". Si 
quieres, justo antes de la linea donde usas el LDAP_CONTROL_PAGED puedes 
poner una linea "no strict subs;" para evitar que dé ese error ahí.

Para hacer un volcado del array de configuracion:

Pon al principio del script la linea "use Data::Dumper;". Despues, justo 
antes de la llamada a $ldap->search pon una linea "print Dumper(\@args);"

Para volcar $mesg y $ldap puedes hacerlo de la misma forma:

print Dumper($mesg);
print Dumper($ldap);

Data::Dumper entiende los formatos de las referencias y te dará la 
informacion que buscas.

Slds
Jorge

El 20/09/11 14:18, David Barrientos J escribió:
> 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 
> <mailto:madrid-pm-request en pm.org>> escribió:
>
>     Envíe los mensajes para la lista Madrid-pm a
>     madrid-pm en pm.org <mailto: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 <mailto:madrid-pm-request en pm.org>
>
>     Puede contactar con el responsable de la lista escribiendo a:
>     madrid-pm-owner en pm.org <mailto: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
>     <mailto:bass.bj en gmail.com>>
>     To: madrid-pm en pm.org <mailto:madrid-pm en pm.org>
>     Subject: [Madrid-pm] consulta masiva a directorio activo
>     Message-ID:
>     <CADC4WV70DHVrY70J=ABfvp4+oeM=cmdS1nLJFsO9g8Lw1hYf2w en mail.gmail.com <mailto: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 <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';
>     }
>     ------------ 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
>     <mailto:jorge.gonzalez en daikon.es>>
>     To: madrid-pm en pm.org <mailto:madrid-pm en pm.org>
>     Subject: Re: [Madrid-pm] consulta masiva a directorio activo
>     Message-ID: <4E78767A.1050208 en daikon.es
>     <mailto: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> <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 <mailto: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 <mailto: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/6e4b309f/attachment-0001.html>


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