[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