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, <[email protected]> escribió: > Envíe los mensajes para la lista Madrid-pm a > [email protected] > > 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: > [email protected] > > Puede contactar con el responsable de la lista escribiendo a: > [email protected] > > 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 <[email protected]> > To: [email protected] > Subject: [Madrid-pm] consulta masiva a directorio activo > Message-ID: > <CADC4WV70DHVrY70J=ABfvp4+oeM=cmds1nljfso9g8lw1hy...@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 <[email protected]> > To: [email protected] > Subject: Re: [Madrid-pm] consulta masiva a directorio activo > Message-ID: <[email protected]> > 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 > > [email protected] > > 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 > [email protected] > http://mail.pm.org/mailman/listinfo/madrid-pm > > Fin de Resumen de Madrid-pm, Vol 57, Envío 1 > ******************************************** >
_______________________________________________ Madrid-pm mailing list [email protected] http://mail.pm.org/mailman/listinfo/madrid-pm
