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 <[email protected]> > 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= >> [email protected]> >> 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 >
_______________________________________________ Madrid-pm mailing list [email protected] http://mail.pm.org/mailman/listinfo/madrid-pm
