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

David Barrientos J bass.bj en gmail.com
Mar Sep 20 05:18:28 PDT 2011


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


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