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]
<mailto:[email protected]>> escribió:
Envíe los mensajes para la lista Madrid-pm a
[email protected] <mailto:[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] <mailto:[email protected]>
Puede contactar con el responsable de la lista escribiendo a:
[email protected] <mailto:[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]
<mailto:[email protected]>>
To: [email protected] <mailto:[email protected]>
Subject: [Madrid-pm] consulta masiva a directorio activo
Message-ID:
<CADC4WV70DHVrY70J=ABfvp4+oeM=cmds1nljfso9g8lw1hy...@mail.gmail.com
<mailto:[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 <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 <[email protected]
<mailto:[email protected]>>
To: [email protected] <mailto:[email protected]>
Subject: Re: [Madrid-pm] consulta masiva a directorio activo
Message-ID: <[email protected]
<mailto:[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> <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] <mailto:[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] <mailto:[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